0

私の Web サービスは次のヘッダーを送信します。

Cache-Control: public, max-age=60, max-stale=86400

今、私の最初の呼び出しで、これは応答です:

  1. コード = 200
  2. cacheResponse = null
  3. networkResponse = レスポンス{コード=200, ...}
  4. 本文 = 正しいデータ

1 分以内の 2 回目の呼び出しは次のとおりです。

  1. コード = 200
  2. cacheResponse = レスポンス{コード=200, ...}
  3. networkResponse = null
  4. 本文 = 正しいデータ

1 分後、Web サービスを削除し、別の呼び出しを行います。max-stale ヘッダーがあるため、cacheResponse を取得して古いデータを表示できると期待しています。応答は次のとおりです。

  1. コード = 404
  2. cacheResponse = レスポンス{コード=200, ...}
  3. networkResponse = レスポンス{コード=404, ...}
  4. 本文 = pagenotfounditem

現在、cacheResponse.body() は null を返すため、古いデータを使用できないため、 String cb = cacheBody.string();. コード サンプルを以下に示します。

        if(response.networkResponse() != null) {
            System.out.println("There is no cache, or cache is invalidated.");
            if(!response.isSuccessful()) {
                System.out.println("Call is not successful");
                if(response.cacheResponse() != null) {
                    System.out.println("There is a cache");
                    ResponseBody cacheBody = response.cacheResponse().body();
                    String cb = cacheBody.string();
                    System.out.println("cacheBody: " + cb); 
                    return cb;
                }
            }

        }
        ResponseBody body = response.body();
        if(body != null) {
            String b = body.string();
            System.out.println("body: " + b); 
            return b;               
        }

この動作は意図されたものですか? その場合、キャッシュされた応答データを取得するにはどうすればよいですか?

4

1 に答える 1

0

次のリクエスト ヘッダーを追加します。

Cache-Control: max-stale=86400

これにより、OkHttp はキャッシュのみを使用するようになります。

于 2014-07-03T14:25:06.630 に答える