通过惰性 API 进行 Android 改造 - 响应最近一小时的数据

问题描述 投票:0回答:1

我正在使用惰性 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")


}
android retrofit
1个回答
0
投票

关于懒惰的要点

-lazy 适用于可变 (var) 和只读 (val) 属性。 - 惰性委托默认是线程安全的,确保初始化代码只执行一次,即使在并发环境中也是如此。 -惰性委托在第一次访问时计算并在之后缓存。

我读了一些有关惰性改造的文章......如第三点(此后缓存)。可能不能被懒惰使用,否则会被缓存,是这个意思吗?

© www.soinside.com 2019 - 2024. All rights reserved.