2016-05-25 88 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指令,用於在網絡不可用。這隻在緩存中接受響應。