对volley的初步分析第一篇
Posted QX丶Monologue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对volley的初步分析第一篇相关的知识,希望对你有一定的参考价值。
进入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的初步分析第一篇的主要内容,如果未能解决你的问题,请参考以下文章