2016-05-25 28 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. インターネット接続が利用可能です。
  2. 有効な応答が受信されてキャッシュされます。
  3. デバイスをインターネットから切断します。
  4. 分内に前回と同じ要求を送信する - >応答が最後
  5. 次に、分が完了した後に同じ要求を送信すると同じです - >応答がありません(UnknownHostException

これは作ります最初の部分("public, max-age=60")が完成しました。

しかし、どういうわけか、"public, max-age=60"部分はまったく動作しません。

この部分は、デバイスがオフラインのときにokhttpが1週間前の古いデータをフェッチできるようにする必要がありますが、代わりにUnknownHostExceptionと表示されます。

答えて

2

私は、これはあなたが探しているものだと思う:

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

これは、ネットワークが利用できないときのためにonly-if-cachedディレクティブを追加します。これは、キャッシュ内にある場合にのみ応答を受け入れます。

関連する問題