0
在我的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;
}
}
這是我的攔截器類,我如下
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
變成真的,我必須將它設置爲OkClient更新緩存。現在我寫了response.newBuilder().header("Cache-Control", "no-cache").build();
,但它既沒有更新緩存也沒有從服務器獲取,我該如何解決這個問題?
我實際上並沒有明白,你能舉個例子嗎? – droidev
@VividVervet 1)你的'Interceptor'可能沒有被調用,因爲它被添加到網絡攔截器(當網絡不用於請求時不會調用它)。 2)你真的不應該在應用層上擺弄HTTP緩存。修復你的網絡服務器。 –
@NightlyNexus攔截器調用和緩存完美,但我無法手動更新緩存 – droidev