【问题标题】:Offline response caching with Retrofit 2 and OkHttp 3使用 Retrofit 2 和 OkHttp 3 进行离线响应缓存
【发布时间】:2016-09-23 03:26:16
【问题描述】:

我正在尝试通过 OkHttp 和 Retrofit 缓存响应。我知道有几个问题与我的类似,但没有一个能够解决我的问题。

以下是我负责修改标头的拦截器。

private static class CachingControlInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            Response originalResponse = chain.proceed(request);
            return originalResponse.newBuilder()
                    .header("Cache-Control", (UtilityMethods.isNetworkAvailable()) ?
                            "public, max-age=60" :  "public, max-stale=604800")
                    .build();
        }
    }

现在,这在第一种情况下完美运行 -

  1. 互联网连接可用。
  2. 收到并缓存了有效响应。
  3. 断开设备与互联网的连接。
  4. 在一分钟内发送与上一个相同的请求 -> 响应与上一个相同
  5. 接下来,一分钟后发送相同的请求 -> 无响应 (UnknownHostException)

这使得第一部分 ("public, max-age=60") 完成。

但是,不知何故,"public, max-age=60" 部分根本不起作用。

这部分应该使 okhttp 能够在设备离线时获取一周前的陈旧数据,但我得到的是UnknownHostException。

【问题讨论】:

    标签: android caching retrofit2 okhttp3


    【解决方案1】:

    我想这就是你要找的:

    .header("Cache-Control", (UtilityMethods.isNetworkAvailable()) ?
                "public, max-age=60" :  "public, only-if-cached, max-stale=604800")
    

    这会在网络不可用时添加only-if-cached 指令。这仅接受缓存中的响应。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2017-05-25
      • 2018-07-17
      • 2015-07-05
      • 2018-06-19
      • 1970-01-01
      • 2015-09-28
      • 2016-09-03
      • 2021-04-30
      相关资源
      最近更新 更多