gpt4 book ai didi

android - 仅使用缓存响应。无网络通话

转载 作者:行者123 更新时间:2023-11-29 00:58:19 25 4
gpt4 key购买 nike

有一个 API 有调用限制,在这种情况下我想缓存响应并且如果缓存仍然有效则不运行网络响应。

首先我有缓存拦截器

fun provideCacheInterceptor(): Interceptor = Interceptor { chain ->
val response = chain.proceed(chain.request())
val cacheControl = CacheControl.Builder()
.maxAge(6, TimeUnit.HOURS)
.maxStale(6, TimeUnit.HOURS)
.onlyIfCached()
.build()
response.newBuilder()
.header("CacheControl", cacheControl.toString())
.build()
}

我将缓存和拦截器附加到客户端

client = OkHttpClient().newBuilder()
.cache(cache)
.addInterceptor(loggingInterceptor)
.addInterceptor(cacheInterceptor)

当我尝试检查缓存和/或网络的响应时的结果

Log.e("!@#", "cached: ${it.raw().cacheResponse()?.toString()}")
Log.e("!@#", "network: ${it.raw().networkResponse()?.toString()}")

我明白了

cached: Response{protocol=http/1.1, code=200, message=, url=https://API}
network: Response{protocol=h2, code=200, message=, url=https://API}

如果缓存仍然有效,有没有办法调用网络端点?

最佳答案

在我执行原始请求并将 header 应用于响应(我的错误)的实现中出现问题,需要修改初始请求然后继续修改后的请求。也似乎是 Cache-Control header 错字。

正确的缓存拦截器看起来像

fun provideCacheInterceptor(networkManager: NetworkManager): Interceptor = Interceptor { chain ->
val request = chain.request()
val cacheControl = CacheControl.Builder()
.maxAge(6, TimeUnit.HOURS)
.maxStale(6, TimeUnit.HOURS)
.build()
chain.proceed(request.newBuilder()
.header("Cache-Control", cacheControl.toString())
.build())
}

关于android - 仅使用缓存响应。无网络通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com