ref: https://github.com/square/okhttp/issues/4003
Большинство решений - это сети с сетевыми запросами, без сетевого кеша запросов.Мое требование - сначала запросить кеш в сети, а затем запросить сеть.THX !!!!
Я пытаюсь, как это:
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
//拦截Request对象
Request request = chain.request();
//判断有无网络连接
boolean connected = CommonUtils.isNetConnected();
if (connected) {
Response response = chain.proceed(request);
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, max-age=" + TIMEOUT_CONNECT)
.build();
} else {
//没有网络
BeLog.e(TAG, "没有有网络");
//无网络时强制使用缓存数据
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
Response response = chain.proceed(request);
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, only-if-cached, max-stale=" + TIMEOUT_DISCONNECT)
.build();
}
//return response;
}