如何告诉 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 忽略缓存并从服务器强制刷新?的主要内容,如果未能解决你的问题,请参考以下文章