OkCacheControl

Additional

Language
N/A
Version
v1.1.1 (Jul 11, 2016)
Created
Jun 22, 2016
Updated
Sep 18, 2018 (Retired)
Owner
Nicolas Cornette (ncornette)
Contributor
Nicolas Cornette (ncornette)
1
Activity
Badge
Generate
Download
Source code

OkCacheControl

Helper class to configure cache behaviour of OkHttp client, also works with Retrofit for Android.

Release version is available on jcenter:

repositories {
    jcenter()
}
dependencies {
    compile 'com.ncornette.cache:okcache-control:1.1.1'
}

Usage

Initialize OkCacheControl with OkHttpClient.Builder(), then you can call 2 extra methods :

  • overrideServerCachePolicy(MaxAgeControl)
  • forceCacheWhenOffline(NetworkMonitor)
  okClient = OkCacheControl.on(new OkHttpClient.Builder())
          .overrideServerCachePolicy(30, MINUTES)
          .forceCacheWhenOffline(networkMonitor)
          .apply() // return to the OkHttpClient.Builder instance
          .cache(cache)
          .build();

Description

  • overrideServerCachePolicy(MaxAgeControl) will override server cache policy on responses with Cache-Control: max-age. Cache will be used until expiration even if network is available. Use it when server doesn't implement a cache policy!

  • forceCacheWhenOffline(NetworkMonitor) will force the use of cache when no network connection is available. When offline, cache will be used even if expired. for Android you can implement a NetworkMonitor that returns the value of ConnectivityManager.getActiveNetworkInfo().isConnected().

Call apply() to add interceptors to OkHttpClient.Builder and return the builder so you can continue to build OkHttpClient and add the cache.

Per request cache control

without Cache-Control header, cache is used until expiration, then network. (with forceCacheWhenOffline() expired cache will be used when offline)

  • add Cache-Control: no-cache to always use network, cache will be used only when offline.

  • add Cache-Control: no-store to not store response in cache.

License

Copyright 2016 Nicolas Cornette

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.