使用Retrofit 2和OkHttp 3进行离线响应缓存

时间:2016-05-25 13:24:15

标签: android caching retrofit2 okhttp3

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

以下是我的Interceptor负责修改标题。

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
  6. 这使第一部分("public, max-age=60")完成。

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

    这部分应该让okhttp在设备离线时获取一周的旧陈旧数据,而是获得UnknownHostException

1 个答案:

答案 0 :(得分:2)

我认为这就是你要找的东西:

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

这为网络不可用时添加了only-if-cached指令。这只接受响应,如果它在缓存中。