Volley:如何设置Cache.Entry

时间:2013-08-12 15:51:24

标签: android android-volley

我正在使用Google的Volley Library作为获取网络数据的设计;

我已经设置了RequestQueue

requestQueue = new RequestQueue(new DiskBasedCache(new File(context.getCacheDir(), 
           DEFAULT_CACHE_DIR)), new BasicNetwork(new 
              HttpClientStack(AndroidHttpClient.newInstance(userAgent))));

我还有子类请求,并且从网络返回数据就好了。我的问题是缓存:在parseNetworkResponse()中,在我的子类Request中被覆盖,当我调用时

return Response.success(list, HttpHeaderParser.parseCacheHeaders(response));

HttpHeaderParser.parseCacheHeaders(response)返回null,因为服务器在其响应头中设置为“no caching”...无论如何我仍然希望将这些数据缓存为变量设置的小时数(可能是24小时) ,我怎么能通过创建一个齐射Cache.Entry来做到这一点...我的理解是URL被用作缓存键值(我希望它是URL)。

总之,由于HttpHeaderParser.parseCacheHeaders(response)返回null,我想创建一个新的Cache.Entry,设置为24小时后到期,缓存密钥是请求的URL。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题并最终得到了这个解决方案:

@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {

    // Create a FakeCache that invalidate the data after 24 hour
    Cache.Entry mFakeCache = HttpHeaderParser.parseCacheHeaders(response);
    mFakeCache.etag = null;
    mFakeCache.softTtl = System.currentTimeMillis() + 86400 * 1000;
    mFakeCache.ttl = mFakeCache.softTtl;

    return Response.success(response.data, mFakeCache);
}