Как сделать еще один вызов API только в случае сбоя 1-го вызова API с помощью модифицированного rxjava - PullRequest
0 голосов
/ 15 мая 2019

Я новичок в модернизации и RXJAVA.Я пытаюсь добиться очень распространенного варианта использования, используя эти 2, но не могу найти подходящих операторов.Вариант использования - я делаю вызов API, чтобы проверить, действителен ли мой токен доступа.Если он больше не действителен, я получаю 401 несанкционированное исключение, в этот момент я хочу сделать вызов API, чтобы получить новый токен доступа, используя токен обновления.Примечание. Тип ответа для обоих запросов API различен.

Как мне этого добиться, используя retrofit и rxjava.

Я пытался добиться этого с помощью flatMap, onErrorResume, но не смог выяснитьлучший способ сделать это.

1 Ответ

0 голосов
/ 18 мая 2019
requestApi.checkAccessToken(accessToken).flatMap(
     object : Function<Response, Observable<Response>> {
         override fun apply(t: Response): Observable<Response> {
            if (t.code() === 400) {
              return requestApi.getAccessToken(refreshToken,"refreshToken").flatMap(
               object : Function<LoginResponse, Observable<Response>> {
                 override fun apply(t: LoginResponse): Observable<Response> {
                        return requestApi.checkAccessToken(t.access_token)
            }
          })
       } else {
          return Observable.just(t)
       }
    }
 }).subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .subscribe(this::handleAccessTokenResponse, this::handleError)
...