在OkHttp 2.0上获得陈旧的身体

时间:2014-07-03 09:18:44

标签: java caching okhttp

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

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

现在,在我的第一个电话中,这是回复:

  1. code = 200
  2. cacheResponse = null
  3. networkResponse =响应{code = 200,...}
  4. body = correctdata
  5. 一分钟内的第二个电话是:

    1. code = 200
    2. cacheResponse =响应{code = 200,...}
    3. networkResponse = null
    4. body = correctdata
    5. 现在,过了一会儿,我删除了我的网络服务,然后再打电话。现在由于max-stale标头,我希望能够检索cacheResponse,以显示旧数据。 答案如下:

      1. code = 404
      2. cacheResponse =响应{code = 200,...}
      3. networkResponse =响应{code = 404,...}
      4. body = pagenotfounditem
      5. 现在,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;               
                }
        

        是否有这种行为,如果是,我该如何获取缓存的响应数据?

1 个答案:

答案 0 :(得分:0)

添加此请求标头:

Cache-Control: max-stale=86400

这会导致OkHttp仅使用缓存。