Is改装+;在Android中使用httpCaching作为默认设置的Okhttp?

Is改装+;在Android中使用httpCaching作为默认设置的Okhttp?,android,http,http-caching,retrofit,okhttp,Android,Http,Http Caching,Retrofit,Okhttp,我在我们的一个应用程序中使用和 我真的找不到一个很好的解释来解释改装的默认行为 如果Okhttp位于类路径上,则会自动使用它。但就我所见,默认的HttpResponseCache是空的 我是否需要通过改造和Okhttp显式启用缓存?您应该手动创建OkHttpClient,并根据需要对其进行配置。在这种情况下,您应该安装缓存。一旦你有了它,就创建一个并将其传递给改装公司 此外,HTTP POST请求没有缓存。但是,将缓存获取。对于OkHttpClient v2.0.0及更高版本,不推荐使用 正如J

我在我们的一个应用程序中使用和

我真的找不到一个很好的解释来解释改装的默认行为

如果Okhttp位于类路径上,则会自动使用它。但就我所见,默认的HttpResponseCache是空的


我是否需要通过改造和Okhttp显式启用缓存?

您应该手动创建OkHttpClient,并根据需要对其进行配置。在这种情况下,您应该安装缓存。一旦你有了它,就创建一个并将其传递给改装公司


此外,HTTP POST请求没有缓存。但是,将缓存获取。

对于OkHttpClient v2.0.0及更高版本,不推荐使用

正如Jesse Wilson指出的,您需要创建自己的缓存。
下面的代码应该创建一个10MB缓存

File httpCacheDirectory = new File(application.getApplicationContext()
    .getCacheDir().getAbsolutePath(), "HttpCache");

HttpResponseCache httpResponseCache = null;
try {
   httpResponseCache = new HttpResponseCache(httpCacheDirectory, 10 * 1024);
} catch (IOException e) {
   Log.e(getClass().getSimpleName(), "Could not create http cache", e);
}

OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setResponseCache(httpResponseCache);
builder.setClient(new OkClient(okHttpClient));

代码基于

OkHttpClient v2的正确实现:

int cacheSize = 10 * 1024 * 1024; // 10 MiB
File cacheDir = new File(context.getCacheDir(), "HttpCache");
Cache cache = new Cache(cacheDir, cacheSize);
OkHttpClient client = new OkHttpClient.Builder()
    .cache(cache)
    .build();

请参见

我在单独的回答中添加了我使用的代码,因为我认为这对其他人来说也很有趣。因为我从你的例子中复制了它,我希望代码是正确的。表示不再需要配置缓存。这是正确的吗?如果这是设置在一个职位,它会被忽略吗?因为我在我的通用生成器上设置它,它用于每个请求,所以我实际上得到了这个错误。。。如果我不使用httpResponseCache.install,则会出现新的httpResponseCache无法在外部使用的错误。。。它不是公共的。那不是10MB的缓存吗?@NelsonOsacky@Janusz实际上不是,它是10KB,不是10MB。看看这里:
long httpCacheSize=10*1024*1024;//10 MiB
相同的规则适用于OkHttp的
缓存
构造函数。仅供参考,这是一个不推荐的答案,setCache在3中不存在。因此,您可以使用新的OkHttpClient.Builder().cache(cache.build()谢谢@frostymarvelous