我正在使用惰性 API 进行改造。
json数据接收完毕,一切正常。唯一的问题是下一次检索是从缓存中...... 仅 1 小时后即可获得新数据。
我该如何解决这个问题。
val okHttpClient: OkHttpClient = OkHttpClient.Builder()
.connectTimeout(6, java.util.concurrent.TimeUnit.SECONDS)
.writeTimeout(6, java.util.concurrent.TimeUnit.SECONDS)
.readTimeout(6, java.util.concurrent.TimeUnit.SECONDS)
.addNetworkInterceptor(CacheInterceptor())
.build()
OkHttpClient.Builder().addInterceptor(interceptor).build()
private val retrofit by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
}
val api: SimpleApi by lazy {
retrofit.create(SimpleApi::class.java)
}
}
类 CacheInterceptor : 拦截器 { 覆盖有趣的拦截(链:Interceptor.Chain):响应{
val request = chain.request()
val originalResponse = chain.proceed(request)
val CACHE_CONTROL_HEADER = "Cache-Control"
val CACHE_CONTROL_HEADER_VALUE = "public, max-age=60"
val CACHE_CONTROL_NO_CACHE = "no-cache"
val shouldUseCache = request.header(CACHE_CONTROL_HEADER) != CACHE_CONTROL_NO_CACHE
if (!shouldUseCache) return originalResponse
val cacheControl = CacheControl.Builder()
.maxAge(60, TimeUnit.SECONDS)
.noCache()
.build()
return originalResponse.newBuilder()
.removeHeader("Pragma")
.removeHeader(CACHE_CONTROL_HEADER)
.header(CACHE_CONTROL_HEADER, CACHE_CONTROL_HEADER_VALUE )
.build()
Log.d("sync-john", "----> sync cache cache control")
}
关于懒惰的要点
-lazy 适用于可变 (var) 和只读 (val) 属性。 - 惰性委托默认是线程安全的,确保初始化代码只执行一次,即使在并发环境中也是如此。 -惰性委托在第一次访问时计算并在之后缓存。
我读了一些有关惰性改造的文章......如第三点(此后缓存)。可能不能被懒惰使用,否则会被缓存,是这个意思吗?