Автономное кэширование ответов с помощью Retrofit 2 и OkHttp 3

Я пытаюсь кэшировать ответ через OkHttp и Retrofit. Я понимаю, что есть несколько вопросов, похожих на мой, но ни один из них не может решить мою проблему.

Ниже приведен мой перехватчик, отвечающий за изменение заголовков.

private static class CachingControlInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            Response originalResponse = chain.proceed(request);
            return originalResponse.newBuilder()
                    .header("Cache-Control", (UtilityMethods.isNetworkAvailable()) ?
                            "public, max-age=60" :  "public, max-stale=604800")
                    .build();
        }
    }

Теперь это отлично работает в первом случае -

  1. Доступно подключение к Интернету.
  2. Допустимый ответ получен и кэширован.
  3. Отключите устройство от интернета.
  4. Отправить тот же запрос, что и предыдущий, в течение минуты -> ответ такой же, как и последний
  5. Затем отправьте тот же запрос через минуту -> Нет ответа (UnknownHostException)

На этом первая часть ("public, max-age=60") завершена.

Но почему-то "public, max-age=60" часть вообще не работает.

Эта часть должна позволить okhttp извлекать устаревшие данные недельной давности, когда устройство находится в автономном режиме, но вместо этого я получаю UnknownHostException.


person krtkush    schedule 25.05.2016    source источник


Ответы (1)


Я думаю, это то, что вы ищете:

.header("Cache-Control", (UtilityMethods.isNetworkAvailable()) ?
            "public, max-age=60" :  "public, only-if-cached, max-stale=604800")

Это добавляет директиву only-if-cached для случаев, когда сеть недоступна. Это принимает ответ, только если он находится в кеше.

person toobsco42    schedule 16.06.2016