我在我的网络调用中使用了带有okHTTP缓存的Retrofit,当我收到响应时,我编写了一个拦截器来查找响应体“timeToCache”值并重写缓存标头。我现在面临一个问题,当我更新一个实体并调用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);
现在我得到了新的响应,但这个响应没有得到缓存?我现在如何将这个响应保存到缓存中?
我找不到更好的方法来解决这个问题,所以我在更新事件成功后植入了删除缓存条目方法来删除条目。
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);
}
}