AndroidVolley
Volley是个什么鬼
Volley,是谷歌官方于2013年发布的用于Android平台的网络通信库,能使网络通信更快,更简单,更健壮。Volley的特点有如下:网络通信更快、有着高效率的GET、POST及网络图像的异步处理请求机制、能对多个请求进行排序、能对请求的结果进行缓存、能多级别取消请求。适用场景:它适用于网络通信频繁但是数据量不大的场景;然而对于数据量非常大的情况下,它的性能就会非常差。Volley名称的由来:aburstoremissionofmanythingsoralargeamountatonce
这里写图片描述
想挣钱吗?快来参与网上调查【点击进入】
免费注册,轻轻松松做调查赚钱,每个调查赚7-10元
查看
Volley有啥本事
Json,图像等异步下载网络请求的排序(scheduling)网络请求的优先级处理缓存多级别取消请求和Activity的生命周期联动(Activity结束时同时取消所有网络请求)
如何获得Volley
Volley的源码可以利用git命令直接获取:
?
gitclonehttps://android.googlesource.com/platform/frameworks/volley
GitHub下载
?
https://github.com/mcxiaoke/android-volley
eclipse导入jar
?
http://download.csdn.net/detail/wx_lyb/9657301
AndroidStudio中在build.gradle中添加
?
compile''com.mcxiaoke.volley:library:1.0.19''
Volley之清蒸:StringRequest
创建一个RequestQueue
?
privateRequestQueuemRequestQueue;
mRequestQueue=Volley.newRequestQueue(this);
创建一个StringRequest对象
第一个参数选择Request.Method.GET即get请求方式第二个参数的url地址根据文档所给第三个参数Response.Listener请求成功的回调第四个参数Response.ErrorListener请求失败的回调
?
StringRequeststringRequest=newStringRequest(Request.Method.GET,"http://www.baidu.com",
newResponse.Listener(){
@Override
publicvoidonResponse(Strings){
//s即为服务器返回的数据
textView.setText(s);
}
},
newResponse.ErrorListener(){
@Override
publicvoidonErrorResponse(VolleyErrorvolleyError){
Log.e("TAG",volleyError.getMessage(),volleyError);
}
});
将StringRequest请求对象添加到RequestQueue队列里面
?
1
mRequestQueue.add(stringRequest);
最后,别忘了在AndroidManifest.xml里声明网络权限
?
1
好了,来尝尝味道如何。
这里写图片描述
Volley之水煮:JsonRequest
JsonRequest是一个抽象类,无法直接创建它的实例,只能从它的子类(JsonObjectRequest和JsonArrayRequest)入手,顾名思义,JsonObjectRequest用于JSON数据,JsonArrayRequest用于JSON数组的。
创建一个RequestQueue
?
1
2
privateRequestQueuemRequestQueue;
mRequestQueue=Volley.newRequestQueue(this);
创建一个JsonObjectRequest对象
第一个参数是一个URl,第二个参数代表Http请求方式,第三个响应监听。RequestQueue将会执行请求,并响应回调onResponse()方法,所以要在onResponse()方法中实现自己的业务逻辑。第四个响应错误监听
?
Stringurl="http://www.tngou.net/tnfs/api/classify";
JsonObjectRequestjsonObjectRequest=newJsonObjectRequest(url,null,
newResponse.Listener(){
@Override
publicvoidonResponse(JSONObjectjsonObject){
//Log.d("TAG",jsonObject.toString());
textView.setText(jsonObject.toString());
}
},newResponse.ErrorListener(){
@Override
publicvoidonErrorResponse(VolleyErrorvolleyError){
Log.e("TAG",volleyError.getMessage(),volleyError);
}
});
将JsonObjectRequest对象添加到RequestQueue队列里面
?
1
mRequestQueue.add(jsonObjectRequest);
第二道菜完成,来尝一尝味道。
这里写图片描述
想挣钱吗?快来参与网上调查【点击进入】
免费注册,只要10分钟,面膜钱轻松赚到手
查看
Volley之油闷:ImageRequest
创建一个RequestQueue
?
privateRequestQueuemRequestQueue;
mRequestQueue=Volley.newRequestQueue(this);
创建一个ImageRequest对象
第一个参数是url,图片的地址;第二个参数是Listener是请求响应成功的回调;第三个参数maxWidth是图片的最大宽度;第四个参数maxHeight是图片的最大高度;第五个参数是图片的颜色属性;第六个参数ErrorListener是请求响应失败回调。
注意:如果指定的网络图片的宽度或者高度大于这里的最大值,则会对图片进行压缩;指定成0的话,就表示不管图片多大,都不会进行压缩。
Bitmap.Config中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。
StringimgUrl="";
ImageRequestimageRequest=newImageRequest(imgUrl,
newResponse.Listener(){
@Override
publicvoidonResponse(Bitmapbitmap){
//响应成功,显示下载的图片
image.setImageBitmap(bitmap);
}
},0,0,Bitmap.Config.RGB_565,newResponse.ErrorListener(){
@Override
publicvoidonErrorResponse(VolleyErrorvolleyError){
//响应失败,显示默认的图片
image.setImageResource(R.mipmap.ic_launcher);
}
});
将ImageRequest对象添加到RequesQueue队列里面
?
1
mRequestQueue.add(imageRequest);
第三道菜出锅,请各位客官品尝。
这里写图片描述
想挣钱吗?快来参与网上调查【点击进入】
免费注册,轻轻松松做调查赚钱,每个调查赚7-10元
查看
Volley之爆炒:ImageLoader
如果你觉得上一道菜油闷ImageRequest还不足以满足你的味蕾,那么,下面这道菜保证你胃口大开,爆炒ImageLoader。它的内部也是使用ImageRequest来实现的,不过ImageLoader要比ImageRequest更加高效,它不仅可以对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。
注意ImageLoader不是继承自Request,所以这道菜的做法也和前面几道菜做法有所不同。
创建一个RequestQueue对象。
?
1
2
privateRequestQueuemRequestQueue;
mRequestQueue=Volley.newRequestQueue(this);
创建一个ImageLoader对象。
ImageLoaderimageLoader=newImageLoader(mRequestQueue,newImageLoader.ImageCache(){
@Override
publicvoidputBitmap(Stringurl,Bitmapbitmap){
}
@Override
publicBitmapgetBitmap(Stringurl){
returnnull;
}
});
获取一个ImageListener对象。
第一个参数指定用于显示图片的ImageView控件,第二个参数指定加载图片的过程中显示的图片,第三个参数指定加载图片失败的情况下显示的图片。
?
1
ImageLoader.ImageListenerlistener=ImageLoader.getImageListener(image,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
调用ImageLoader的get()方法加载网络上的图片。
?
1
imageLoader.get("http://p1.qhimg.com/t0176e92390569422fa.jpg",listener);
当然,如果你想对图片的大小进行限制,也可以使用get()方法的重载,指定图片允许的最大宽度和高度
?
1
imageLoader.get("http://p1.qhimg.com/t0176e92390569422fa.jpg",listener,400,400);
这里的ImageCache对象是还有做任何处理,获取的图片还不能缓存。所以下面就是给这道菜加点佐料(做缓存处理)。
新建一个BitmapCache并实现ImageCache接口。
?
publicclassBitmapCacheimplementsImageLoader.ImageCache{
privateLruCachemCache;
publicBitmapCache(){
intmaxSize=1010241024;
mCache=newLruCache(maxSize){
@Override
protectedintsizeOf(Stringkey,Bitmapbitmap){
returnbitmap.getRowBytes()bitmap.getHeight();
}
};
}
@Override
publicBitmapgetBitmap(Stringurl){
returnmCache.get(url);
}
@Override
publicvoidputBitmap(Stringurl,Bitmapbitmap){
mCache.put(url,bitmap);
}
}
将上面的获取ImageLoader对象步骤改一下。
?
1
ImageLoaderimageLoader=newImageLoader(mQueue,newBitmapCache());
好了,爆炒ImageLoader这道菜也可以出锅了。客官,请您慢用!
这里写图片描述
想挣钱吗?快来参与网上调查【点击进入】
免费注册,只要10分钟,尿布钱轻松赚到手
查看
Volley之油炸:NetworkImageView
除了以上两种方式之外,Volley还提供了第三种方式来加载网络图片,即使用NetworkImageView。不同于以上两种方式,NetworkImageView是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。
最后的给各位食客奉上压轴大菜!
创建一个RequestQueue对象。
?
1
2
privateRequestQueuemRequestQueue;
mRequestQueue=Volley.newRequestQueue(this);
创建一个ImageLoader对象。
和上面的ImageLoader获取对象一样
?
1
ImageLoaderimageLoader=newImageLoader(mQueue,newBitmapCache());
在布局文件中添加一个NetworkImageView控件。
?
在代码中获取该控件的实例。
?
1
networkImageView=(NetworkImageView)findViewById(R.id.network_image_view);
设置要加载的图片地址。
setDefaultImageResId()方法设置加载中显示的图片;setErrorImageResId()方法加载失败时显示的图片;setImageUrl()方法加载目标图片的URL地址。
?
1
2
3
networkImageView.setDefaultImageResId(R.mipmap.ic_launcher);
networkImageView.setErrorImageResId(R.mipmap.ic_launcher);
networkImageView.setImageUrl("http://p1.qhimg.com/t0176e92390569422fa.jpg",imageLoader);
|
|