Dans mon application Android, je cache les réponses du serveur en utilisant OkHttp. pour que j'ai mis en œuvre le code comme suitComment mettre à jour le cache 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;
}
}
c'est ma classe intercepteur et je suis en train de cela OkClient comme suit
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);
}
mais le problème est, lorsque le mShouldUpdateCache
booléenne devient vrai, je dois mettre à jour le cache. En ce moment, j'ai écrit response.newBuilder().header("Cache-Control", "no-cache").build();
mais ce n'est ni la mise à jour du cache ni la récupération du serveur, comment puis-je résoudre ce problème?
Je n'ai pas compris réellement, pouvez-vous expliquer avec un exemple? – droidev
@VividVervet 1) Votre 'Interceptor' n'est probablement pas appelé car il est ajouté aux intercepteurs réseau (qui ne sont pas appelés lorsque le réseau n'est pas utilisé pour la requête). 2) Vous ne devriez vraiment pas jouer avec la mise en cache HTTP au niveau de la couche application. Fixez votre serveur web. –
@NightlyNexus intercepteur appelle et la mise en cache fonctionne parfaitement, mais je ne peux pas mettre à jour le cache manuellement – droidev