Is Retrofit+Okhttp using httpCaching as a default in Android?

10,879

Solution 1

You should manually create your OkHttpClient and configure it how you like. In this case you should install a cache. Once you have that create an OkClient and pass it to Retrofit's RestAdapter.Builder

Also, no caching for HTTP POST requests. GETs will be cached, however.

Solution 2

Correct implementation for 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();

see documentation

Solution 3

DEPRECATED for OkHttpClient v2.0.0 and higher

As Jesse Wilson pointed out you need to create your own cache.
The following code should create a 10MB cache.

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));

The code is based on Jesse Wilsons example on Github.

Share:
10,879
SHRISH M
Author by

SHRISH M

Updated on July 22, 2022

Comments

  • SHRISH M
    SHRISH M almost 2 years

    I use retrofit and okhttp in one of our applications.

    I can't really find a good explanation for the default behaviour of Retrofit.

    If Okhttp is on the class path it will be automatically used. But as far as I can see it the default HttpResponseCache is null.

    Do I need to explicitly enable caching with Retrofit and Okhttp?