如何告诉 OkHttpClient 忽略缓存并从服务器强制刷新?

Posted

技术标签:

【中文标题】如何告诉 OkHttpClient 忽略缓存并从服务器强制刷新?【英文标题】:How to tell OkHttpClient to ignore cache and force refresh from server? 【发布时间】:2015-05-17 04:05:03 【问题描述】:

在我的 android 应用程序中,我将 Retrofit 与 OkHttpClient 一起使用,并启用了缓存以访问某些 API。我们的一些 API 有时会返回空数据。我们在应用中提供了一个“刷新”按钮,供客户端从特定 API 重新加载数据。

我如何告诉 OkHttpClient 一个特定的请求应该忽略缓存的条目。或者,是否有一种机制可以删除对应于单个请求的缓存响应?

我看到了 Cache.remove(request) 方法,但它被标记为私有。

【问题讨论】:

【参考方案1】:

正如 Jake Wharton 在 issues 中建议的那样,这样做可以忽略缓存:

request.setCacheControl(CacheControl.FORCE_NETWORK);

【讨论】:

我使用的是旧版本,更新到 3.4 并且您的解决方案有效。谢谢你 是否可以从 OkHttpClient 类而不是 Request 类中设置 cacheControl? 是 - 要全局禁用缓存,请使用空缓存创建客户端:new OkHttpClient().newBuilder().cache(null).build(); 是否可以注释某些 API 调用以完全不使用缓存? 如果您使用协程适配器,这将不起作用。有什么想法吗?【参考方案2】:
@Headers("Cache-Control: no-cache") 

上的方法应该可以工作。 如果你想动态地做,你可以添加一个

@Header("Cache-Control") 

字符串 cacheControl 参数并传递 null 或“no-cache”

【讨论】:

以上是关于如何告诉 OkHttpClient 忽略缓存并从服务器强制刷新?的主要内容,如果未能解决你的问题,请参考以下文章

OkHttpClient 关闭连接

禁用okhttp的缓存

离线时使用 OKHttp 进行改造如何使用缓存数据

okhttp3怎么设置代理

OKHttp缓存有效期

如何使用 okHttpClient 执行 graphql 查询?