Volley是一个Google开发的一个Android平台的网络通信库,相比AsyncTask,Volley使得网络通信更加迅速,简单,可靠。Volley适用于网络请求频繁,单次请求数据量较小的场景。
Volley的功能:
1.异步获取JSON数据,网络图片资源
2.网络请求排序
3.网络请求优先级处理
4.缓存
5.多级别取消请求
6.与Activity生命周期联动
Volley库可从网络搜索获得,也可从git获取后编译得到
示例:
1.获取JSON数据
public void getJson()
{
RequestQueue requestQueue = Volley.newRequestQueue(this); //获取请求对象
String url = "http://fanyi.youdao.com/openapi.do?keyfrom=fjkljlk345&key=819777360&type=data&doctype=json&version=1.1&q=%E8%8B%B9%E6%9E%9C";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,url,null,
new Response.Listener<JSONObject>(){
@Override
//接收结果
public void onResponse(JSONObject response) {
System.out.println(response);
}
},
new Response.ErrorListener(){
@Override
public void onErrorResponse(com.android.volley.VolleyError args) {
System.out.println("请求出错");
}
}
);
requestQueue .add(jsonObjectRequest);
}
2.异步加载图片
public void loadImage(){
String imageURL = "https://www.baidu.com/img/bdlogo.png";
RequestQueue requestQueue = Volley.newRequestQueue(this);
final LruCache<String,Bitmap> lruCache = new LruCache<String, Bitmap>(20);
ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String s) {
return lruCache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
lruCache.put(s,bitmap);
}
};
ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache);
ImageLoader.ImageListener imageListener = imageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
imageLoader.get(imageURL,imageListener);
}
3.使用NetWorkImageView控件
NetWorkImageView是Volley库中的一个自定义的空间,它可以替代Android中的ImageView,在父级容器关闭后,NetWorkImageView会自动关闭自己的网络请求,不必考虑生命周期的问题。
XML布局文件代码
<com.android.volley.toolbox.NetworkImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/netWorkImageView"
/>
方法代码
public void loadNetWorkImageView(){
RequestQueue requestQueue = Volley.newRequestQueue(this);
String imageURL = "https://www.baidu.com/img/bdlogo.png";
final LruCache<String,Bitmap> lruCache = new LruCache<String, Bitmap>(20);
ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String s) {
return lruCache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
lruCache.put(s,bitmap);
}
};
ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache);
networkImageView.setTag("imageURL");
networkImageView.setImageUrl(imageURL,imageLoader);