OkHttp +改造脱机缓存不起作用

伊凡·福克

我正在从两台服务器请求json数据。OkHttp不缓存来自第一台服务器的响应,来自第二台服务器的响应已正确缓存。

来自第一台服务器的响应,由于某些原因,缓存不起作用:

<--- HTTP 200
Cache-Control: public, max-age=2230
Content-Type: application/json; charset=utf-8
Expires: Sat, 28 Mar 2015 11:34:13 GMT
Last-Modified: Sat, 28 Mar 2015 10:34:13 GMT
Vary: *
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Date: Sat, 28 Mar 2015 10:57:01 GMT
Content-Length: 1381
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1427540192625
OkHttp-Received-Millis: 1427540192940
<--- END HTTP (1381-byte body)

设备离线时来自第一台服务器的响应:

---> HTTP GET
Cache-Control: public, only-if-cached, max-stale=2419200
---> END HTTP (no body)
<--- HTTP 504
<--- END HTTP (0-byte body)

来自第二个服务器的响应,缓存起作用:

<--- HTTP 200
Content-Type: application/json; charset=utf-8
Date: Sat, 28 Mar 2015 11:19:51 GMT
Server: nginx/1.6.2
X-Berry-Env: p4
X-Berry-Version: 2.10.0.96e8b7c
X-Powered-By: Express
Connection: keep-alive
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1427541591103
OkHttp-Received-Millis: 1427541591385
<--- END HTTP (92663-byte body)

设备离线时第二台服务器的响应:

<--- HTTP 200
Content-Type: application/json; charset=utf-8
Date: Sat, 28 Mar 2015 11:19:51 GMT
Server: nginx/1.6.2
X-Berry-Env: p4
X-Berry-Version: 2.10.0.96e8b7c
X-Powered-By: Express
Connection: keep-alive
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1427541591103
OkHttp-Received-Millis: 1427541591385
Warning: 110 HttpURLConnection "Response is stale"
Validating map...
<--- END HTTP (92663-byte body)

我遵循了这个答案,这是我的其余适配器:

protected RestAdapter getRestAdapter(final Context context) {
    if (restAdapter == null) {
        Gson gson = new GsonBuilder()
                .excludeFieldsWithoutExposeAnnotation()
                .create();

        int cacheSize = 10 * 1024 * 1024;
        Cache cache = new Cache(context.getCacheDir(), cacheSize);
        OkHttpClient client = new OkHttpClient();
        client.setCache(cache);

        restAdapter = new RestAdapter.Builder()
                .setConverter(new GsonConverter(gson))
                .setEndpoint(API_URL)
                .setClient(new OkClient(client))
                .setRequestInterceptor(new RequestInterceptor() {
                    @Override
                    public void intercept(RequestFacade request) {
                        if (Utils.isOnline(context)) {
                            int maxAge = 60;
                            request.addHeader("Cache-Control", "public, max-age=" + maxAge);
                        } else {
                            int maxStale = 60 * 60 * 24 * 28;
                            request.addHeader("Cache-Control",
                                    "public, only-if-cached, max-stale=" + maxStale);
                        }
                    }
                })
                .build();
        restAdapter.setLogLevel(RestAdapter.LogLevel.FULL);
    }

    return restAdapter;
}
伊凡·福克

我已经通过使用网络拦截器解决了这个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OkHttp +改造脱机缓存不起作用

来自分类Dev

脱机缓存okhttp +改造不起作用

来自分类Dev

改造+ OkHTTP-响应缓存不起作用

来自分类常见问题

脱机时可以使用OKHttp进行改造以使用缓存数据吗

来自分类Dev

Android HTTP与OkHttp连接不起作用

来自分类Dev

OkHttp证书插件似乎不起作用

来自分类Dev

OkHttp +毕加索+改造

来自分类Dev

改造+ okhttp:检索GZIPInputStream

来自分类Dev

改造+ okhttp:检索GZIPInputStream

来自分类Dev

改造OkHttp SSLHandshakeException

来自分类Dev

改造 2 OkHttpClient 缓存不起作用

来自分类Dev

OkHttp 不缓存请求

来自分类Dev

OkHttp 缓存如何工作?

来自分类Dev

改造-Okhttp客户端如何缓存响应

来自分类Dev

改造+ OkHttp + GZIP版本的JSON

来自分类Dev

改造和OkHttp gzip解码

来自分类Dev

Okhttp 缓存文件未创建(不工作 okhttp 缓存)

来自分类Dev

OkHttp缓存策略和ETag

来自分类Dev

Android okhttp获取缓存响应

来自分类Dev

通过PUT请求上传多部分/表单数据,在okhttp上不起作用?

来自分类Dev

使用OkHttp缓存(不进行翻新)

来自分类Dev

OKHttp缓存响应的安全性

来自分类Dev

OKHttp3最大失效缓存

来自分类Dev

改造在OKHttp 2.0中的类路径错误上检测到不受支持的OkHttp

来自分类Dev

改造在OKHttp 2.0中的类路径错误上检测到不受支持的OkHttp

来自分类Dev

联机脱机EventListener不起作用

来自分类Dev

无法与Picasso和okhttp一起设置改造超时

来自分类Dev

OkHttp3,改造和证书固定:如何使固定失效

来自分类Dev

改造后续调用不起作用