我的网络服务发送这些标头:
Cache-Control: public, max-age=60, max-stale=86400
现在在我的第一个电话中,这是响应:
- 代码 = 200
- 缓存响应=空
- networkResponse = 响应{code=200, ...}
- 正文 = 正确数据
一分钟内的第二通电话是:
- 代码 = 200
- cacheResponse = 响应{code=200, ...}
- 网络响应 = 空
- 正文 = 正确数据
现在,一分钟后,我删除了我的网络服务,然后再打一个电话。现在由于 max-stale 标头,我希望能够检索 cacheResponse,以显示旧数据。响应是这样的:
- 代码 = 404
- cacheResponse = 响应{code=200, ...}
- networkResponse = 响应{code=404, ...}
- 正文 = 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;
}
这种行为是有意的,如果是这样,我怎样才能获得缓存的响应数据?