Volley 的使用以及自定义Request
一.什么是 Volley
2013年Google I/O大会上推出了一个新的网络通信框架。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。Volley特别适合数据量不大但是通信频繁的场景。
二.使用
1. 简单请求
现在,我访问百度首页通过 Volley 提供给我的 Request-->StringRequest()
从图中,可以到 StringRequest 这个类需要我们提供--请求方式(是 get 还是 post),请求地址,正确返回数据接口的回调和请求发生错误接口的回调!!
大家有可能注意到了,当我们写完请求之后,我们就像请求队列里添加了这个请求,之后请求就执行啦!!这只是GET请求!
那接下来,我给大家演示一下 post 的请求。请看图
从图中大家可以看到了!我只是修改了一下请求方式,把 get 改成了 post! 另外,我重写了 Request 这个方法中的 getParams() 方法!那它是干什么用的呢?他就是返回我们的请求参数的!使用者只要把 key-value放入 HashMap中就行啦!
不知道,大家注意到没有!这两个请求我都调用了这个方法 request.setTag("baidu"); 我为啥要调用这个方法嘞?其实是有原因的!在Volley框架中,我们可以给每个请求设置tag,这样我们就可以在 activity 或者 fragment 生命结束的时候(onDestory())中在代用这个方法 queue.cancelAll("baidu"); 这个就可以取消正在请求的请求了(当然tag要一致哦)。避免出现空指针异常!
2.自定义请求
首先,我们来看一下 StringRequest 类的源码:
从图中,我们可以看到,StringRequest 也是继承 Request 这个泛型类的。继承这个类,我们要重写来两个方法
deliverResponse(String response) 和 parseNetworkResponse(NetworkResponse response) 这个两个方法具体做什么,我已在图中写了注释!其实很简单!如果,看懂了这个,我们就可以自己写 Request 了!在这个我还说明一下
NetworkResponse 这个类中包含了服务器返回的结果,返回头等。其中的 response.data 这个是一个 byte 数组!
response.headers 这个是请求头数据! HttpHeaderParser.parseCharset(response.headers) 这个就是服务器返回的编码方式!之后就是简单的 new 个字符串了!
-----------------------------------------开始自定义喽-------------------------------------
大家在平时的开发中和服务器的数据交互一般都是 json 格式的数据!那么现在就来自定义个 JSONRequest 请求!我先直接上代码
可以看到,JSONRequest 是继承自 Request 类的。在parseNetworkResponse()方法中,先是将服务器响应的数据解析出来,然后通过调用 FastJson 的 parseObject 方法将数据组装成对象。在deliverResponse方法中仍然是将最终的数据进行回调.
在这里,我想先说一下我在继承 Request 时比较常覆写的几个方法以及它们的含义!
Map<String, String> getParams();用来返回请求参数的。
Map<String, String> getHeaders();用来返回请求头的!我们可以用来返回指定的请求头!
RetryPolicy getRetryPolicy();用来返回超市时间的!
String getParamsEncoding();用来返回请求数据的编码的!