android - 如何给RxJava+Retrofit 添加刷新 token 逻辑?

标签 android retrofit rx-java

<分区>

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

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

有效 token :

  1. 提出要求
  2. 获取响应
  3. 完成

无效 token :

  1. 提出要求
  2. 获取响应
  3. 如果 response_code == 403,需要刷新 token
  4. 刷新 token
  5. 这里我想转到第 1 步并再次向 API 发出请求
  6. Else - 完成

如何使用 RxJava 实现?

最佳答案

试试这个有我的知识

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) {

                }
            }); 

关于android - 如何给RxJava+Retrofit 添加刷新 token 逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40969754/

相关文章:

android - onActivityResult 中返回的两个图像路径合并为一个导致 java.io.FileNotFoundException

android - AlertDialog - 试图让警报工作

android - Robolectric + rxJava + 改造 第二次调用抛出 java.io.InterruptedIOException

android - MVP + RxJava - 将调度器放在 Presenter 或 Interactor 中?

java - 方形图像的裁剪形状Android在应用程序中

android - getWindow().setSoftInputMode 未按预期工作

android - Retrofit 2 中的错误处理是如何进行的?我找不到大多数解决方案建议的 RetrofitError 类?

java - 如何检索 JSONObject 子字段?

java - 为什么 Completable 和 Observable 之间的订阅时间副作用安排不同?

unit-testing - 单元测试 Vertx - java.util.concurrent.TimeoutException