android - 截击 : How to set up a Cache. 条目

标签 android android-volley

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

我已经设置了一个请求队列

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

我还对 Request 进行了子类化,并且可以很好地从网络返回数据。我的问题是缓存:在 parseNetworkResponse() 中,当我调用时,它在我的 Request 子类中被覆盖

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

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

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

有什么想法吗?

谢谢!

最佳答案

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

@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);
}

关于android - 截击 : How to set up a Cache. 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18191366/

相关文章:

android - RxJava - 获取列表,对其项目进行操作,再次分组到列表中。 toList() 等待 onCompleted()

android - 截击同步请求永远阻塞

json - 捕获在 servlet 中使用 android volley 发送的 jsonobject 请求

android - 利用具有Android引擎的旧/新设备来驱动其他电子设备

java - 在 Android 中共享 Intent 不向任何应用程序共享图像(弹出窗口后)

java - 将电脑上的C++opencv项目转成opencv android的步骤

Android Studio (2.1.1) 呈现 "no target device"尽管 'adb devices' 命令找到设备

java - Volley DELETE 请求抛出 400 BAD REQUEST

java - 简单的 Android 图像下载异步

java - 使用 Android Volley 库的带有缩略图的自定义 ListView 不会加载任何结果