本文为自己在应用开发过程中使用 Volley的一些心得,至于简介请参考:Android网络通信库Volley简介 by liubin

一、Request自定义 Http Headers

继承Request或其子类,实现getHeaders()方法即可

如:

二、Request附上Cookies

其实与上一条类似,都是自定义 Headers。
这里直接继承上面定义类。
如:

三、强制缓存数据

发现在设置允许缓存request.setShouldCache(true);后,还是得不到缓存数据。

经追查得知在实现parseNetworkResponse(NetworkResponse response)方法时,一般都会调用 Volley 提供的HttpHeaderParser解析Http响应头来是否缓存数据。但一些时候,会想自己来控制缓存。这时就可以如下来实现parseNetworkResponse()方法:

四、获取缓存的二进制数据

一般的缓存数据的 key 都是Request 的 url,或者是实现request。getKey()自定义的。
知道了 key 就可以获取到对应的缓存:

Cache.Entry entry = mQueue.getCache().get(key);
1
2
3
4
public static byte[] getDataInDiskCache(String key){
Cache.Entry entry = mQueue.getCache().get(key);
return entry ==null? null : entry.data;
}

注意:不一定能获取到数据,原因是缓存任务线程还未被执行或者正在执行中!

五、强制刷新数据

在允许缓存后,Volley 会根据缓存的有效期来决定是否重新联网获取数据。

有时会有强制刷新数据的需求,这时就需要把缓存标记为无效:

1
2
3
4
5
final Cache.Entry entry = mQueue.getCache().get(url);
if (entry != null && entry.data != null && entry.data.length > 0)
if (!entry.isExpired()) {
mQueue.getCache().invalidate(url, true);
}