Используйте Rx Java в порядке очереди и приостановите / начните очередь - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь использовать Rx Java в своем приложении Android вместе с Retrofit для взаимодействия с RESTful API.

В моем приложении Android я разослал несколько запросов на различные события UX. Если один из запросов возвращает ошибку «Недопустимый токен», я хочу приостановить любые другие запросы, поставленные в очередь, до их запуска, чтобы я мог обновить токен пользователя, а затем возобновить приостановленные запросы.

Это можно использовать Rx Java? Я только изучаю библиотеку, и мне трудно найти эту функцию.

Спасибо,

1 Ответ

0 голосов
/ 10 марта 2020

Если эти запросы отправляются параллельно, вы, скорее всего, получите несколько ошибок «Invalid Token». Вы хотели бы обновить sh токен только для первого случая ошибки. Чтобы приостановить запросы во время обновления токена, подумайте, что источник действительного токена является наблюдаемым.

Предположим, у вас есть класс обработки сети, который имеет методы:

Single<Response> makeNetworkRequest(Request request) { ... }
Single<Boolean> getToken() { ... }

It реализован таким образом, что значение выводится, когда токен доступен, но в противном случае ожидает его обновления.

Тогда ваша цепочка наблюдателей будет выглядеть примерно так:

observerChain
  .flatMapSingle(request -> networkHandler.makeNetworkRequest(request)
       .retryWhen(error -> error.flatMapSingle(e -> networkHandler.getToken()))
  ...

The * Оператор 1011 * восстанавливается после ошибки, предоставляя наблюдаемое, которое, если оно не пустое, будет повторно подписываться на наблюдаемое в восходящем направлении, в данном случае, makeNetworkRequest().

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

...