В моем приложении Android я кэширую ответы с сервера с помощью OkHttp. для этого я реализовал код следующегоКак обновить кеш OkHttp
private class CacheInterceptor implements Interceptor {
Context mContext;
public CacheInterceptor(Context context) {
this.mContext = context;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
request = request.newBuilder()
.header(HEADER_MOBILE_OS, Constants.MOBILE_OS)
.header(HEADER_APP_VERSION, BuildConfig.VERSION_NAME)
.build();
Response response = chain.proceed(request);
if (!mShouldUpdateCache) {
response.newBuilder()
.header("Cache-Control", String.format("max-age=%d", CACHE_MAX_AGE)).build();
} else {
//update cache in this case
response.newBuilder()
.header("Cache-Control", "no-cache").build();
mShouldUpdateCache = false;
}
return response;
}
}
это мой класс перехватчика и я устанавливаю это OkClient следующего
okHttpClient.networkInterceptors().add(new CacheInterceptor(context));
File httpCacheDirectory = new File(context.getCacheDir(), "response_cache");
Cache cache = new Cache(httpCacheDirectory, CACHE_SIZE);
if (cache != null) {
okHttpClient.setCache(cache);
}
но проблема в том, когда логическое mShouldUpdateCache
становится истинным Я должен обновите кеш. прямо сейчас я написал response.newBuilder().header("Cache-Control", "no-cache").build();
, но он не обновляет кеш и не извлекает с сервера, как я могу решить эту проблему?
Я не понял на самом деле, не могли бы вы объяснить на примере? – droidev
@VividVervet 1) Ваш «перехватчик», вероятно, не вызывается, потому что он добавляется к сетевым перехватчикам (которые не вызывают, когда сеть не используется для запроса). 2) Вы действительно не должны возиться с кешированием HTTP на уровне приложения. Исправьте свой веб-сервер. –
@NightlyNexus перехватчик вызывает и кеширует работает отлично, но я не могу обновить кэш вручную – droidev