OkHttpClient无法解析方法setCache

时间:2016-10-11 23:42:50

标签: retrofit okhttp okhttp3

我正在尝试为Retrofit设置缓存,以便它不必经常检索数据。我跟着this SO,因为它看起来正好在我需要的方向上。

我有以下(与SO相同)

OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(REWRITE_CACHE_CONTROL_INTERCEPTOR);
File httpCacheDirectory = new File(getCacheDir(), "responses");
int cacheSize = 10*1024*1024;
Cache cache = new Cache(httpCacheDirectory, cacheSize);
client.setCache(cache);

但是,client.setCache(cache)会返回错误cannot resolve method setCache

我在这里做错了什么?我已经改装2.1.0和okhttp3 3.4.1

2 个答案:

答案 0 :(得分:15)

在3.x中,future上的一堆方法被转移到OkHttpClient上的方法中。你想要这样的东西:

OkHttpClient.Builder

答案 1 :(得分:0)

File httpCacheDirectory = new File(getCacheDir(), "responses");
int cacheSize = 10*1024*1024;
Cache cache = new Cache(httpCacheDirectory, cacheSize);

OkHttpClient client = new OkHttpClient.Builder()
    .addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
    .cache(cache)
    .build();

/////////and

public static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response originalResponse = chain.proceed(chain.request());
            if (Global.networkConnection()) {
                int maxAge = 60; // read from cache for 1 minute
                return originalResponse.newBuilder()
                        .header("Cache-Control", "public, max-age=" + maxAge)
                        .build();
            } else {
                int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
                return originalResponse.newBuilder()
                        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
                        .build();
            }
        }
    };