我正在尝试为OkHttp3设置缓存。我正在开发一个映射应用程序,其中请求不断发送以获取地图图块/数据。我有如下设置缓存:
try {
if (mContext.getExternalCacheDir() != null) {
String mapsCacheDirectoryPath = getMapsCacheDirectoryPath(mContext);
File httpCache = new File(mapsCacheDirectoryPath + "/tile_cache");
Cache okTileCache = new Cache(httpCache, 100 * 1024 * 1024);
okClient.setCache(okTileCache);
}
} catch (Exception e) {
e.printStackTrace();
}
我还使用Interceptor将Cache-Control标头添加为:
okClient.interceptors().add(
new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
String cacheHeaderValue = isInternetConnectionAvailable(context, false)
? "public, max-age=2419200"
: "public, only-if-cached, max-stale=2419200";
Request request = originalRequest.newBuilder().build();
Response response = chain.proceed(request);
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", cacheHeaderValue)
.build();
}
}
);
okClient.networkInterceptors().add(
new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
String cacheHeaderValue = isInternetConnectionAvailable(context, false)
? "public, max-age=2419200"
: "public, only-if-cached, max-stale=2419200";
Request request = originalRequest.newBuilder().build();
Response response = chain.proceed(request);
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", cacheHeaderValue)
.build();
}
}
);
现在我在启用Wifi的情况下运行应用程序。它开始在指定的存储位置缓存数据。但是,当我关闭wifi并重新启动应用程序时,它不会从缓存中加载/显示数据。发送请求时,我会调用onFailure并显示错误:
java.net.ConnectException:无法连接到/192.168.290.75:8787
建议我应该关闭响应体以使其工作,所以我添加了response.body()。close()但仍然得到相同的错误。我做错了什么?