我正在使用带有okHTTP缓存的Retrofit进行网络调用,当我收到响应时,我编写了一个拦截器来查找响应体“timeToCache”值并重新写入缓存头。我现在面临一个问题,当我更新一个enitity并调用get方法时,它总是返回我的缓存响应。为了避免我添加以下标题来请求
@GET("ws/something")
Something getSomething(@Header("Cache-Control") String cacheControl);
and then when calling you either supply null for a (maybe-)cached version or "no-cache" for a live version:
myApi.getSomething(forceRefresh ? "no-cache" : null);
现在我得到了新的响应,但这个响应没有得到缓存?我现在如何将此响应保存到缓存中?
答案 0 :(得分:0)
我找不到解决此问题的更好方法,因此我实施了删除缓存条目方法,以在更新事件成功后删除条目。
public void removeHTTPCacheEntry(final String cachedDelURL) {
try {
if (client != null && client.cache() != null && client.cache().urls() != null) {
Iterator<String> cacheURlsItr = client.cache().urls();
while (cacheURlsItr.hasNext()) {
try {
URL cachedURL = new URL(cacheURlsItr.next());
String urlPath = cachedURL == null ? "" : cachedURL.getPath();
if (!StringUtils.isEmpty(urlPath) && cachedDelURL.equals(urlPath)) {
cacheURlsItr.remove();
break;
}
} catch (MalformedURLException e1) {
Log.e(TAG, "MalformedURLException", e1);
}
}
}
} catch (IOException e1) {
Log.e(TAG, "removeHTTPCacheEntry", e1);
}
}