我在我們的應用程序中使用了retrofit和okhttp。是改造+ Okhttp使用httpCaching作爲默認的Android?
我無法真正找到對Retrofit的默認行爲的一個很好的解釋。
如果Okhttp在類路徑上,它將被自動使用。但據我所見,默認的HttpResponseCache爲null。
我是否需要使用Retrofit和Okhttp顯式啓用緩存?
我在我們的應用程序中使用了retrofit和okhttp。是改造+ Okhttp使用httpCaching作爲默認的Android?
我無法真正找到對Retrofit的默認行爲的一個很好的解釋。
如果Okhttp在類路徑上,它將被自動使用。但據我所見,默認的HttpResponseCache爲null。
我是否需要使用Retrofit和Okhttp顯式啓用緩存?
您應該手動創建您的OkHttpClient並將其配置爲您喜歡的方式。在這種情況下,你應該安裝一個緩存。一旦你創建了OkClient並將其傳遞給Retrofit的RestAdapter.Builder
另外,不對HTTP POST請求進行緩存。但是,GET將被緩存。
棄用OkHttpClient V2.0.0和更高
傑西·威爾遜指出,你需要創建自己的緩存。
以下代碼應該創建一個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();
setCache在3中不存在。所以你可以使用'新的OkHttpClient.Builder()。緩存(緩存).build();' – frostymarvelous
Thanks @frostymarvelous –
我說我在不同的答案中使用的代碼,因爲我認爲這將是爲其他人也很有趣。由於我從你的例子中複製了它,我希望代碼可以。 – Janusz
http://stackoverflow.com/questions/22445177/trying-to-make-use-of-httpcache-android說,沒有必要再配置緩存。它是否正確? – Janusz