0

我的网络服务发送这些标头:

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

现在在我的第一个电话中,这是响应:

  1. 代码 = 200
  2. 缓存响应=空
  3. networkResponse = 响应{code=200, ...}
  4. 正文 = 正确数据

一分钟内的第二通电话是:

  1. 代码 = 200
  2. cacheResponse = 响应{code=200, ...}
  3. 网络响应 = 空
  4. 正文 = 正确数据

现在,一分钟后,我删除了我的网络服务,然后再打一个电话。现在由于 max-stale 标头,我希望能够检索 cacheResponse,以显示旧数据。响应是这样的:

  1. 代码 = 404
  2. cacheResponse = 响应{code=200, ...}
  3. networkResponse = 响应{code=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 回答