我有一个简单的用例:成功时使用网络响应。否则使用缓存响应。 但问题是,当网络响应是一个错误时,缓存也会写入该响应。
我读到的一个建议是当networkResponse不成功时在Interceptor中执行FORCE_CACHE。 但由于networkResponse会覆盖缓存并出现错误,因此下次请求时(服务器仍然返回错误),缓存将出错。
以下是我目前的代码段。当networkResponse是一个错误时,我需要添加用于返回缓存值的逻辑。任何建议都会有很大帮助。
private void setup() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(REWRITE_CACHE_CONTROL);
File httpCacheDirectory = new File(context.getCacheDir(), "responses");
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024); // 10 MB
builder.cache(cache);
}
private static final Interceptor REWRITE_CACHE_CONTROL = new Interceptor() {
@Override
public okhttp3.Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain.request();
if (!hasAConnection()) {
request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();
}
return chain.proceed(request);
}
};