我使用Retrofit OKHttp客户机来缓存来自JSON的响应。
这个很好用。
但是,如果我在设备上采取了导致服务器上的数据更新的操作,我需要一种方法来“使”某个特定路由失效,以确保下次对该数据提出请求时,会再次从服务器获取数据,而不是现在过时的缓存版本。
目前,我通过在请求的Cache-Control头中显式调用带有“无缓存”标志的新路由来解决这一问题,但这迫使我在需要新数据之前下载它,如果采取多个操作,可能会多次下载这些数据,只是为了保持缓存的更新。
是否有一种方法,我可以标记一个路由/方法在我的改造/OKhttp客户端的缓存过期,需要一个强制性的更新,通过网络时,它是下一次请求?
发布于 2014-05-21 05:14:34
这方面没有API,但应该有API。请打开一个OkHttp问题来报告这一点。
我们可能需要一段时间才能实现,因为我们需要找出最好的API是什么。使单个URL无效很简单。要使一系列URL无效(比如square.com/cash/*
)要困难得多,因为OkHttp的缓存目前是由URL校验和组织的。还有一些难看的边缘情况,例如,如果当前正在将无效的URL写入缓存,会发生什么。
发布于 2017-01-18 11:29:31
使用retrofit2和OkHttp3,您可以通过在API方法定义参数中添加一个缓存控制头来强制新的响应:
@GET("ws/something")
Something getSomething(@Header("Cache-Control") String cacheControl);
然后,在调用时,可以为(可能-)缓存版本提供null
,也可以为活动版本提供"no-cache"
:
myApi.getSomething(forceRefresh ? "no-cache" : null);
https://stackoverflow.com/questions/23782531
复制相似问题