gpt4 book ai didi

android - 使用 OkHttp 缓存 POST 请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:48 36 4
gpt4 key购买 nike

我使用 OkHttp 向我的服务器发出一些 POST 请求。这很好用。现在我想使用 OkHttp 的缓存来缓存请求的响应,并在设备离线时使用它们。我尝试了其他问题的许多解决方案,但没有一个有效。

我使用 OkHttp 2.5.0

使用下面的代码,当设备可以访问互联网时,我会得到一个有效的响应。但是如果我关闭互联网,它会抛出 java.net.UnknownHostException: Unable to resolve host "example.com": No address associated with hostname

这是我当前的代码,它不起作用:

重写缓存头的拦截器:

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;
}

发出请求:

RequestBody body = RequestBody.create(TEXT, data);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = getHttpClient().newCall(request).execute();

最佳答案

您不能使用 OkHttp 的缓存来缓存 POST 请求。您需要使用其他一些机制来存储它们。

关于android - 使用 OkHttp 缓存 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727599/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com