小编Pav*_*vel的帖子

RxJava中发生错误后如何更改重试请求中的参数

我向具有改造2.0的服务器发送登录请求,并且服务器返回到客户端会话令牌,但我必须在其他请求中使用该令牌,但是此令牌的生存期有限,并且当它到期时,服务器将返回HTTP错误401。

遇到此错误后,我尝试通过以下代码进行重新登录:

    holder.getApi(GuideProfileApi.class)
      .getProfile(String.valueOf(holder.getServerId()), holder.getServerToken())
      .subscribeOn(Schedulers.io())
      .retryWhen(new Function<Observable<Throwable>, ObservableSource<?>>() {
         @Override
         public ObservableSource<?> apply(Observable<Throwable> throwableObservable) throws Exception {
           return throwableObservable.flatMap(new Function<Throwable, ObservableSource<?>>() {
             @Override
             public ObservableSource<?> apply(Throwable throwable) throws Exception {
               if (throwable instanceof HttpException &&  ((HttpException)throwable).code() == 401) {
                 RegistryLoginResult loginResult = holder.login().blockingSingle();
                 return holder.getApi(GuideProfileApi.class)
                    .getProfile(String.valueOf(loginResult.getUserId()), loginResult.getSessionToken());
               }
               return Observable.error(throwable);
            }
        });
     }
  })
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(new Consumer<ProfileResult>() {
    @Override
    public void accept(ProfileResult profileResult) throws Exception {
      Log.d("Result", profileResult.toString());
    }
  }, new Consumer<Throwable>() {
      @Override
      public void accept(Throwable throwable) throws …
Run Code Online (Sandbox Code Playgroud)

android retrofit2 rx-java2

3
推荐指数
2
解决办法
1712
查看次数

标签 统计

android ×1

retrofit2 ×1

rx-java2 ×1