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

34
在我的安卓应用程序中,我正在使用启用缓存的OkHttpClient与Retrofit访问一些API。有些API有时会返回空数据。我们在应用程序中提供了一个“刷新”按钮,供客户重新从特定API加载数据。
我该如何告诉OkHttpClient忽略缓存记录,针对某个请求?或者,是否有一种机制可以删除与单个请求相对应的缓存响应?
我看到Cache.remove(request)方法,但它被标记为私有。
2个回答

30

正如Jake Wharton在issues中建议的那样,要忽略缓存,请执行以下操作:

request.setCacheControl(CacheControl.FORCE_NETWORK);

我之前使用的是旧版本,升级到了3.4版本后,你的解决方案可以正常工作。谢谢。 - Nidhin
2
能否从OkHttpClient类中设置cacheControl,而不是从Request类中设置? - zihadrizkyef
10
是的 - 要全局禁用缓存,请使用空缓存创建客户端:new OkHttpClient().newBuilder().cache(null).build(); - Simon
2
有没有可能给一些API调用做注释,让它们完全不使用缓存? - Someone Somewhere
如果您使用协程适配器,这将无法正常工作。有什么想法吗? - Till Krempel

7
@Headers("Cache-Control: no-cache") 

在方法应该工作的情况下。如果您想要动态执行此操作,可以添加一个标签


@Header("Cache-Control") 

字符串缓存控制参数,可以传递null或"no-cache"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接