Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如:
他们各有优劣,之前个人则比较喜欢用android-async-http, 如今Google推出了官方的针对Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,Volley在提供了高性能网络通讯功能的同时,对网络图片加载也提供了良好的支持,完全可以满足简单REST客户端的需求, 我们没有理由不跟上时代的潮流
使用Volley
下载Volley源码并build jar包。
$ git clone https://android.googlesource.com/platform/frameworks/volley$ cd volley$ android update project -p$ ant jar
然后把生成的jar包引用到我们的项目中,extras目录下则包含了目前最新的volley源码。
说明
此Demo主要介绍了日常网络开发常用的基本功能,但volley的扩展性很强,可以根据需要定制你自己的网络请求。
volley视频地址:?v=yhv8l9F44qo&feature=player_embedded
以上是在Google IO的演讲上ppt的配图,从上面这张图我们可以看出,volley适合快速,简单的请求(Json对象,图片加载)。
volley的特性:
JSON,图像等的异步下载;
网络请求的排序(scheduling)
网络请求的优先级处理
缓存
多级别取消请求
和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
接下来,我们来学习简单的使用下volley给我提供的API吧。
1.首先拿到一个请求队列(RequestQueue只需要一个实例即可,不像AsyncTask每次使用都要new一个)
[java]
//初始化RequestQueue一个activity只需要一个
privatevoidinitRequestQueue(){
mQueue=Volley.newRequestQueue(getApplicationContext());
}
2.实现volley的异步请求类(JsonObjectRequest,JsonArrayRequest,StringRequest,ImageRequest)
由于用法都相差不大,我就不一一举例了,举几个常用有代表性的例子:
以下代码是StringRequest的get请求:
[java]
//get请求
[java]
privatevoidloadGetStr(Stringurl){
StringRequestsrReq=newStringRequest(Request.Method.GET,url,
newStrListener(),newStrErrListener()){
protectedfinalStringTYPE_UTF8_CHARSET="charset=UTF-8";
//重写parseNetworkResponse方法改变返回头参数解决乱码问题
//主要是看服务器编码,如果服务器编码不是UTF-8的话那么就需要自己转换,反之则不需要
@Override
protectedResponse<String>parseNetworkResponse(
NetworkResponseresponse){
try{
Stringtype=response.headers.get(HTTP.CONTENT_TYPE);
if(type==null){
type=TYPE_UTF8_CHARSET;
response.headers.put(HTTP.CONTENT_TYPE,type);
每天告诉自己一次,『我真的很不错』