Last active
May 1, 2017 21:32
-
-
Save wafer-li/9a7d98a449890b37fb4be49f184a3406 to your computer and use it in GitHub Desktop.
Cache and Offline Cache in Retrofit2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Remember to remove the
Pragma
header, or you will get 504 code ERROR