2016-05-25 48 views
0

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

以下是我的负责修改标题的拦截器。现在

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. Internet连接可用。
  2. 收到并缓存了有效的响应。
  3. 断开设备与互联网的连接。
  4. 发送一分钟内前一个相同的请求 - >应答是像上次一样
  5. 接下来,发送相同的请求后一分钟内完成 - >无应答(UnknownHostException

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

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

这部分应该启用okhttp获取一个星期陈旧的数据,当设备脱机,而是,我得到UnknownHostException

回答

2

我认为这是你在找什么:

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

这增加了only-if-cached指令,用于在网络不可用。这只在缓存中接受响应。