Android Okhttp不显示/加载缓存响应

时间:2016-08-24 17:13:06

标签: android okhttp offline-caching

可能Duplicate

我正在尝试为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()但仍然得到相同的错误。我做错了什么?

0 个答案:

没有答案