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

前端 未结 3 876
悲&欢浪女
悲&欢浪女 2020-12-28 11:25

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 cl

相关标签:
3条回答
  • 2020-12-28 11:47

    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.

    0 讨论(0)
  • 2020-12-28 11:50

    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.

    0 讨论(0)
  • 2020-12-28 11:54

    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

    0 讨论(0)
提交回复
热议问题