Retrofit - Различные ответы API на разных устройствах

Проблема точно так же, как и следующая: у меня есть один api, который может предоставить некоторые данные и один apk,

Я получил свой ответ api с моим устройством и другой другой старый ответ на эмулятор с тем же апком!

Ответ эмулятора обновляется с последними изменениями, в то время как другой другой ответ до изменений.

Приложение использует модификацию без кэширования. Так что может быть проблемой?

Запрос содержит только один заголовок (токен доступа). Ответ содержит такие заголовки, как (ETag, Access-Control-Max-Age), но модификация не должна обрабатывать их, поскольку кеш отсутствует.

Снимок экрана от почтальона: enter image description here

Также при ожидании некоторое время все устройства становятся актуальными!

Ответ 1

Вы уверены в этом?

Приложение использует модификацию без кэширования

Основываясь на этом https://github.com/square/retrofit/issues/678, я думаю, что модернизация (OkHttp внутри retrofit) кэширует ваш запрос.

Вы можете изменить это поведение двумя способами:

  • добавить? _t = TIMESTAMP в свой URL запроса запроса
  • удалить заголовок "Access-Control-Max-Age" из ответа сервера

Ответ 2

Или вы можете создать нового клиента OkHttp, чтобы модифицировать и написать что-то вроде этого:

new OkHttpClient.Builder().cache(null).build();

или же

Request.cacheControl(CacheControl.FORCE_NETWORK)

Ответ 3

Так что может быть проблемой?

Если вы не найдете проблему на клиенте, вы должны искать ее на стороне сервера. Любое кэширование (в базе данных или на уровне ответа HTTP) может показать это поведение.

Без дальнейших знаний о вашей настройке и тестовой среде невозможно понять, в чем проблема. Ты пишешь

Также при ожидании некоторое время все устройства становятся актуальными

Что это значит? Как вы определяете, если ваши устройства актуальны?

В вашем сложном случае, с задействованным бэкэндом, вы должны представить пример проекта Github, где это поведение можно воспроизвести.