Это может быть очень простой вопрос, но у меня закончились идеи.Retrofit v2.4.0 не отправляет заголовок If-Modified-Since , в результате кеширование не работает.
Я опрашиваю сервер несколько раз в день, чтобы узнать, есть лилюбые обновленные данные, следовательно, требуется заголовок If-Modified-Since .(push-уведомления могут быть реализованы в новом выпуске)
На основании этой статьи установка чрезвычайно проста: https://futurestud.io/tutorials/retrofit-2-activate-response-caching-etag-last-modifiedЯ прочитал несколько связанных статей, но они были сосредоточены на тех случаях использования, когда реализация сервера была либо недоступна, либо не отправляла заголовки.Это не мой случай.Те предложили использовать networkInterceptors()
.Поскольку отправляются правильные заголовки ответа, мне не нужен перехватчик (я полагаю).
Теоретически это должно работать.
На основании заголовков ответа похоже, что серверправильно настроен.
Вот код:
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.HEADERS);
Cache cache = new Cache(getApplication().getCacheDir(), 30 * 1024 * 1024);
httpClient = new OkHttpClient.Builder()
.cache(cache)
.addInterceptor(logging)
.build();
retrofit = new Retrofit.Builder()
.baseUrl("http://someserver:8080/")
.callbackExecutor(Executors.newSingleThreadExecutor())
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
Журналы:
D / Okhttp: -> GET http://someserver:8080/model/modelId http / 1.1D / OkHttp: -> END GET
<- 200 OK <a href="http://someserver:8080/model/modelId" rel="nofollow noreferrer">http://someserver:8080/model/modelId (23 мс)D / OkHttp: Cache-Control: приватныйD / OkHttp: Content-Length: 3240854D / OkHttp: Content-Type: application / octet-streamD / OkHttp: Последнее изменение: Пн, 14 мая 2018 07:22:25 GMTD / OkHttp: Дата: Пн, 14 мая 2018 09:03:50 GMTD / OkHttp: <- КОНЕЦ HTTP</p>
Пожалуйста, дайте мне знать, что я делаю не так.