如何将刷新令牌逻辑添加到RxJava + Retrofit?

Art*_*tem 2 android rx-java retrofit

我是RxJava的新手,但我喜欢它.现在我没有什么问题.我正在使用RxJava+ Retrofit.

如果我有用户的有效令牌,我会收到API的响应,但如果令牌无效,我必须刷新令牌并再次尝试发出请求.

有效令牌:

  1. 使reuqest
  2. 得到回应
  3. 完成

令牌无效:

  1. 提出要求
  2. 得到回应
  3. If response_code == 403,需要刷新令牌
  4. 刷新令牌
  5. 在这里,我想转到1步并再次向API发出请求
  6. Else - 完成

如何使用RxJava?

Raj*_*esh 5

试试这个有我的知识

service.normalRequest()
            .flatMap( new Func1<Response, Observable<Response>>() {
                @Override
                public Observable<Response> call(Response response) {
                    if (response.code() == 403) {
                        return service.refreshToken(refreshRequest)
                                .flatMap(new Func1<Response, Observable<Response>>() {
                                    @Override
                                    public Observable<Response> call(Response response) {
                                        return service.normalRequest();
                                    }
                                });

                    } else {
                        return Observable.just(response);
                    }

                }
            }).subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(
                new Subscriber<Response>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Response response) {

                }
            }); 
Run Code Online (Sandbox Code Playgroud)