对volley的初步分析第一篇

QX丶Monologue QX丶Monologue     2022-09-09     255

关键词:

进入android世界已经快要两年了,放眼望去,在这两年的android世界里,自己多少也成长了点,一路上磕磕碰碰,即使现在的我还是android学术界里最垫底的那一位,但还是阻挡不了我对未来android世界的探索的脚步,自从上次我坚定不移的辞掉了我的工作后,我发现这真的是我做得最正确的决定没有之一,我不知道当初我为什么要这么做,但是我只知道我耳边有这么个声音告诉我,世界那么多大,你真的该去看看了,我不想每天就码着烂掉牙的几行代码,一些被自己反复使用的封装的工具类,最可怕的是自己完全没有推陈出新的欲望,对未来充满了迷茫,养尊处优,这么做估计最后自己得到的只有年龄,失去了青春,而技术还是没有任何改进。于是我果断的踏上了 找新工作的路途,经过了两周的奔波,总算我来到了一家新的公司,来到新公司里有许多我学习的地方,同时也感觉到了自己的藐小,随着日子一天天的过去,不知道从何时开始养成了一些莫名的习惯,每天早上来到公司的第一件事就是看看各个技术论坛和各种技术分享网站,看看有没有最近更新的知识,每次撸代码很累的时候,就停息下来,看看别人的博客,和技术论坛,看看别人提的问题自己是否能够回答,或者看着别人的回答,自己也心里默默的想着,我会不会想到这种方法,或者有没有更加好的解决问题的办法。偶尔自己也会在自己不忙碌的时候写些博客,总结自己的不足。我相信虽然现在的我和以前的我还是没有多大的区别,但是至少目前我过得很充实,我很喜欢这样的工作,未来我一定会成长的更多。好了不念经了,这是我看了郭神对volley源码解析的第三遍后,自己重新写的,希望对各位能有所帮助。

 

volley是在13年的谷歌大会上推出的网络通讯框架,离17年已经有4个年头了,在这期间许多的网络请求框架都变得更加的成熟了,如okhttp、nohttp、Retrofit等。但volley只适合进行数据量不大,通信频繁的网络操作,有这么多请求框架,我为什么偏偏要解析volley了,其实我是这样想的,我看到好多大神,他们都对volley的源码有深入研究过,说白了就是感觉他们都挺牛逼的样子,自己也想去试试水,而且我觉得一通百通,只要会一个,其它的也万变不离其中。

1.在gradle文件里面进行配置
compile 'com.mcxiaoke.volley:library:1.0.+'

2.网络请求框架肯定是要加网络权限了。

在清单文件里加入<uses-permission android:name="android.permission.INTERNET"/>权限

3.StringRequest的用法
//默认指定为get的方式请求
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

StringRequest request = new StringRequest("https://www.cnblogs.com/", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(Tag, "成功响应:" + response);

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(Tag, "错误信息:" + error.getMessage());
}
});

rq.add(request);

//Post方式的请求

RequestQueue rq = Volley.newRequestQueue(MainActivity.this);
StringRequest request = new StringRequest(Request.Method.POST, "https://www.cnblogs.com/", new Response.Listener<String>() {


@Override
public void onResponse(String response) {
Log.d(Tag, "成功响应:" + response);

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(Tag, "错误信息:" + error.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");

return map;
}
};

rq.add(request);

4.JsonRequest的用法

RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

JsonObjectRequest jr = new JsonObjectRequest("http://v.juhe.cn/weather/index", null, new Response.Listener<JSONObject>() {

@Override
public void onResponse(JSONObject response) {
Log.d(Tag, "成功响应:" + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(Tag, "错误信息:" + error.getMessage());

}
});

rq.add(jr);

5.ImageRequest的用法

RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

ImageRequest ir = new ImageRequest("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center"
, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {

iv.setImageBitmap(response);


}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

iv.setImageResource(R.drawable.ic_launcher);

}
});

rq.add(ir);

6.ImageLoader的用法

RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

ImageLoader loader = new ImageLoader(rq, new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String url) {
return null;
}

@Override
public void putBitmap(String url, Bitmap bitmap) {

}
});

ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv, R.drawable.ic_launcher, R.drawable.ic_launcher);

loader.get("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center"
, listener);

7.进行image缓存的功能

//进行image的缓存功能
private void requestDataForImageCache() {
RequestQueue rq = Volley.newRequestQueue(MainActivity.this);

ImageLoader loader = new ImageLoader(rq, new MyImageCache());

ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.drawable.ic_launcher,R.drawable.ic_launcher);

loader.get("http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center"
,listener);

}

public class MyImageCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;


public MyImageCache() {

int maxsize = 10 * 1024 * 1024;//10

mCache = new LruCache<String, Bitmap>(maxsize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {

//对sizeof和maxsize的解释:http://blog.csdn.net/yincheng886337/article/details/50678851
//http://blog.csdn.net/quanshuai0225/article/details/47104251


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //API 19
return bitmap.getAllocationByteCount();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {//API 12
return bitmap.getByteCount();
}
// 在低版本中用一行的字节x高度
return bitmap.getRowBytes() * bitmap.getHeight(); //earlier version



}
    };
    }
        @Override
        public Bitmap getBitmap(String url) {
        //拿图片
          return mCache.get(url);
        }
        @Override
        public void putBitmap(String url, Bitmap bitmap) {
        //放图片
          mCache.put(url, bitmap); }
      }

8.NetworkImageView的用法

  RequestQueue rq=Volley.newRequestQueue(MainActivity.this);

  ImageLoader loader=new ImageLoader(rq,new MyImageCache());
  networkImageView = (NetworkImageView) findViewById(R.id.network_image);
  networkImageView.setDefaultImageResId(R.drawable.default_image);
  networkImageView.setErrorImageResId(R.drawable.failed_image);
  networkImageView.setImageUrl(
"http://pic.qiantucdn.com/58pic/26/69/44/77M58PICXaI_1024.jpg!/fw/780/watermark/url/L3dhdGVybWFyay12MS4zLnBuZw==/align/center",
loader);
 
 
 
 
 
 
 

volley的初步了解

Volley的介绍Volley是什么?2013年GoogleI/O大会上推出的网络请求和图片加载框架其优点是api简单,性能优秀非常适合数据量不大但是通信频繁的网络请求,而对于大数据量的操作,如文本下载,表现则没有那么好Volley内部仍然是使... 查看详情

volley源码看这一篇就够了

Volley是Android中一个经典的网络框架,所以现如今面试的时候问Volley的源码分析有很多,那我们就有很有必要细致的研究一下它的源码了,让我们走进它的内心世界里吧!一些错误的理解在分析Volley源码之前,... 查看详情

volley--图片处理方式源码分析(代码片段)

简介本篇文章是关于对Volley的图片加载做相应的分析,分析Volley的ImageRequest、ImageLoader、NetworkImageView类对图片加载的策略,同样,本文是多多少少基于前面两篇文章Volley–基本用法和Volley–源码分析的分析,比如... 查看详情

第一篇:查阅数据

...本文采用具体实例讲解的方式,详细演示对一个数据集的分析过程。Step1:载入数据集        命令da 查看详情

初步了解jvm第一篇(代码片段)

...相信都会有一个很好的认知。废话不多说,直接带大家来初步认识一下JVM。什么是JVM?JVM(JavaVirtualMachine)是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域,它负责执行指令,还要管理数据、内存... 查看详情

volley--源码分析(代码片段)

简介关于Volley封装性跟实用性是毋庸置疑的,本篇文章是争对上一篇文章Volley–基本用法做出比较详细的过程分析,分析Volley请求的流程,缓存的策略,工作线程的执行分配,接口回调的机制,代码的封装... 查看详情

centos7搭建kafka集群-第一篇

...式计算集群的时候,是否会遇到这样的一些问题:我们想分析下用户行为(pageviews),以便我们设计出更好的广告位我想对用户的搜索关键词进行统计,分析出当前的流行趋势有些数据,存储数据库浪费,直接存储硬盘效率又低... 查看详情

问题账户需求分析

...·和Liz进行一次面对面的交流。包括:第一步暂时得出的初步需求分析文档向Liz的交付和对一些还不清晰数据的度量标准和依据进行精确确认。  ·整理收集到的需求进行归档。 查看详情

邹传伟:对人民银行dc/ep的初步分析

http://opinion.caixin.com/2019-11-01/101477903.html【财新网】(专栏作家邹传伟)2019年10月24日,习总书记在中央政治局第十八次集体学习中指出“区块链技术应用已延伸到数字金融”。理解数字金融的关键,是理解人民银行DC/EP(Dig... 查看详情

matrix源码分析之第一篇(代码片段)

Matrix源码分析之第一篇概述前几天腾讯将一款Android应用性能监控的框架matrix开源了,源码地址在https://github.com/Tencent/matrix,作者是微信终端团队。matrix到底是什么?据官方说法如下:Matrix是一款微信研发并日常使用的APM(Applicat... 查看详情

对python数据分析的初步认知

一、引言面对现实中纷繁复杂的数据信息,如何认识这些数据,如何对其进行有效的分析,是一个非常重要的问题。最近在Python的学习中,了解到NumPy库能够进行数据分析,下文简单汇总了我的学习总结和心得... 查看详情

初步尝试添加四象限分析法分析项目可课程进展

首先根据邹欣老师的构建之法里面的内容,可以获得截图如下:并且给予了详尽的解释,其中维持,用最低的成本保持功能,不至于落后太多抵消,填补自身产品的短板,用最短的时间做到“足够好”优化,花大力气,长时间优... 查看详情

volley框架源代码分析

Volley框架分析Github链接Volley框架分析Volley源代码解析为了学习Volley的网络框架,我在AS中将Volley代码又一次撸了一遍,感觉这样的照抄代码也是一种挺好的学习方式.再分析Volley源代码之前,我们先考虑一下,假设我们自己要设计一个... 查看详情

开发版速达扩展功能-增值业务报表之分析交叉表第一篇

...的增值报表,今天我们就来讲讲只有开发版才有的报表:分析交叉表1.首先我们打开增值报表=>销售业务报表=>销售货品类别金额表,进行日期查询得到我们需要的报表样式:2.该交叉分析表的样式我们来分析下,点开配置交... 查看详情

elk学习过程第一篇(代码片段)

...是就想解决这个问题,发现elk可以很好的处理日志,还能分析日志,对收集的日志,后面进一步处理也是很好的。所以就选择试用elk知道用什么了,那接下来就是部署,试用了。首先准备使用的版本,下载地址:https://www.elastic.c... 查看详情

最棒的软件工程小组第一次小组讨论~

小组成员介绍:崔红婧李思雨王琦岳林坦张瀚中初步确定项目我们小组的项目今天下午三点半我们开始进行小组讨论:首先初步确定了我们的项目(如下图),但在具体实践过程中可能还会有所改动。明确了我们将要进行的任务... 查看详情

r数据分析第一篇:温习概率论

概率论是人们在长期实践中发现的理论,是客观存在的。自然界和社会上发生的现象是多种多样的,有一类现象,在一定条件下必然发生,称作确定性现象,而概率论研究的现象是不确定性现象,嗯嗯,醒醒,概率论研究的对象... 查看详情

第一篇数据分析项目实战:用户消费行为分析

参考技术A本篇文章以模仿为主,利用pandas进行数据处理,分析用户消费行为。数据来源CDNow网站的用户购买明细。一共有用户ID,购买日期,购买数量,购买金额四个字段。分析步骤第一部分:数据类型的处理—字段的清洗缺失值... 查看详情