7

我正在使用 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 因为服务器在其响应标头中设置为“无缓存”......无论如何我仍然想将此数据缓存可变的小时数(可能是 24 小时),怎么能我通过创建一个凌空 Cache.Entry... 我的理解是 URL 被用作缓存键值(我希望它是 URL)。

综上所述,由于 HttpHeaderParser.parseCacheHeaders(response) 返回 null,我想创建一个新的 Cache.Entry 设置为 24 小时后过期,并且缓存键是请求的 URL。

有什么想法吗?

谢谢!

4

1 回答 1

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);
}
于 2013-09-11T10:53:01.800 回答