Skip to content

Instantly share code, notes, and snippets.

@wafer-li
Last active May 1, 2017 21:32
Show Gist options
  • Save wafer-li/9a7d98a449890b37fb4be49f184a3406 to your computer and use it in GitHub Desktop.
Save wafer-li/9a7d98a449890b37fb4be49f184a3406 to your computer and use it in GitHub Desktop.
Cache and Offline Cache in Retrofit2
private val clientBuilder: OkHttpClient.Builder =
OkHttpClient.Builder()
.addNetworkInterceptor(CacheInterceptor)
.addInterceptor(CommonHeaderInterceptor)
.cache(cache)
private val retrofitBuilder: Retrofit.Builder =
Retrofit.Builder()
.baseUrl(BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(clientBuilder.build())
object CacheInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): okhttp3.Response {
var request = chain.request()
if (!ApiManager.isNetworkAvailable()) {
request = request.newBuilder()
.removeHeader("Pragma")
.cacheControl(CacheControl.FORCE_CACHE)
.build()
}
val originalResponse = chain.proceed(request)
val cacheControl = originalResponse.header("Cache-Control")
if (isRemoteNoCache(cacheControl)) {
return originalResponse.newBuilder()
.removeHeader("Pragma")
.header("Cache-Control", "public, max-age=" + 5000)
.build()
} else
return originalResponse
}
private fun isRemoteNoCache(cacheControl: String?): Boolean =
cacheControl == null ||
cacheControl.contains("no-store", true) ||
cacheControl.contains("no-cache", true) ||
cacheControl.contains("must-revalidate", true) ||
cacheControl.contains("max-age=0", true)
}
@wafer-li
Copy link
Author

wafer-li commented May 1, 2017

Remember to remove the Pragma header, or you will get 504 code ERROR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment