我使用OkHttp向我的服务器发出一些POST请求。这很好用。 现在我想使用OkHttp的缓存来缓存请求的响应,并在设备脱机时使用它们。 我从其他问题尝试了许多解决方案,但没有一个能有效。
我使用OkHttp 2.5.0
使用下面的代码,当设备可以访问互联网时,我会收到有效的回复。
但是,如果我关闭互联网,它会抛出一个java.net。dato.FechaIngreso = dr.IsDBNull(6) ? default(DateTime) : dr.GetDateTime(6);
:无法解析主机“example.com”:没有与主机名关联的地址
这是我当前的代码,不起作用:
用于重写缓存标头的拦截器:
UnknownHostException
获取客户的方法:
private final Interceptor mCacheControlInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (isOnline()) {
request.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=7887")
.build();
} else {
request.newBuilder()
.header("Cache-Control", "public, max-stale=2419200")
.build();
}
Response response = chain.proceed(request);
// Re-write response CC header to force use of cache
return response.newBuilder()
.header("Cache-Control", "public, max-age=86400") // 1 day
.build();
}
};
提出请求:
private OkHttpClient getHttpClient() {
if (mHttpClient == null) {
mHttpClient = new OkHttpClient();
mHttpClient.setConnectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);
File cacheDir = mContext.getDir(CACHE_NAME, Context.MODE_PRIVATE);
mHttpClient.setCache(new Cache(cacheDir, CACHE_SIZE));
mHttpClient.networkInterceptors().add(mCacheControlInterceptor);
}
return mHttpClient;
}
答案 0 :(得分:11)
您无法使用OkHttp的缓存缓存POST请求。您需要使用其他一些机制来存储它们。