Я хочу кешировать ответ в течение 2 часов и, следовательно, пытался добавить кеш в мой okhttp-клиент, каждый раз при подключении API к сети он работает нормально, но в следующий раз, включив режим полета, мы пытаемся получить данные в автономном режиме, этодает retrofit2.HttpException: HTTP 504 Неудовлетворительный запрос (только если кешируется) Я пробовал каждое решение, связанное с этим исключением, размещенное здесь, на SO. Пожалуйста, помогите мне выяснить, что я делаю не так ... застрял на этом очень долго.
interface TrendingRepoService {
@GET("/repositories?language=&since=daily")
suspend fun getTrendingRepos() : List<Repo>
}
object RetrofitClient {
private fun getClient(context: Context): Retrofit {
val cacheSize = (5 * 1024 * 1024).toLong() //cache size is 5mb
val myCache = Cache(File(context.cacheDir, "responses"), cacheSize)
val okHttpClient = OkHttpClient.Builder()
.cache(myCache)
.addInterceptor { chain ->
var request = chain.request()
if (hasNetwork(context)!!) {
request.newBuilder().removeHeader("Pragma")
.addHeader("Cache-Control", "public, max-age=" + 5)
} else {
request = request.newBuilder()
.removeHeader("Pragma")
.addHeader("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 2) //cache should expire after 2 hours
.build()
}
println("network: " + chain.proceed(request).networkResponse())
println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + myCache.directory().lastModified())
println("cache: " + chain.proceed(request).cacheResponse())
chain.proceed(request)
}
.build()
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl("https://github-trending-api.now.sh")
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
.build()
}
fun getTrendingService(context: Context): TrendingRepoService {
return getClient(context).create(TrendingRepoService::class.java)
}
}
Я вижу следующие файлы в папке кэша моего приложения
Содержимое файла сохраняется .0.tmp конечный файл в кеше
https://github-trending-api.now.sh/repositories?language=&since=daily
GET
0
HTTP/1.1 200
14
date: Mon, 04 Nov 2019 19:27:43 GMT
content-type: application/json; charset=utf-8
x-powered-by: Express
access-control-allow-origin: *
etag: W/"4fcb-tcvKxcVttStpWpvGjIHTyk/TMbU"
cache-control: max-age=120
x-now-trace: hel1,bru1,sfo1
x-now-id: hel1:rv96m-1572895662521-476640337170
strict-transport-security: max-age=63072000
x-now-instance: 4008292682
content-encoding: gzip
server: now
OkHttp-Sent-Millis: 1572895661313
OkHttp-Received-Millis: 1572895662894
TLS_AES_256_GCM_SHA384
2
MIIFTzCCBDegAwIBAgISA4Bu+MYBP......
0
TLSv1.3
Как максимальный возраст составляет 120 ?? Каждый раз, когда я получаю 504 ошибку, когда я хочу получить данные с кешем. Когда я нажимаю на API без сети, в папке кеша существует только файл журнала, другие два файла не появляются в следующий раз.