配色: 字号:
Android Volley
2016-10-19 | 阅:  转:  |  分享 
  
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);

献花(0)
+1
(本文系thedust79首藏)