【问题标题】:RxJava combining Observables for more than one requestRxJava 结合 Observables 处理多个请求
【发布时间】:2016-02-21 14:24:45
【问题描述】:

我的 rx 与改造架构存在一些问题。

我有Observable<SignUpServerCode> signUp(@Body AccountSignUpRequest signUpRequest) 向服务器发出注册请求。服务器返回我SignUpServerCode,其中我有参数code,如果它== 200 我请求授权Observable<LoginServerCode> logIn(@Body AccountLogInRequest logInRequest);,它返回我LoginServerCode。我是 rx 的新手,我不明白如何将这 2 个可观察请求合二为一。

我的任务发出注册请求,过滤结果,如果成功则再次请求登录,最后我应该有LoginServerCode

目前只有注册请求,如何添加授权请求?

Observable<SignUpServerCode> signUp = networkBaseService.signUp(model.getSignUpRequest());
        signUp.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<SignUpServerCode>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(SignUpServerCode signUpServerCode) {

                    }
                });

【问题讨论】:

    标签: android retrofit rx-java


    【解决方案1】:

    您可以将 signUp 调用/observable 平面映射为发出登录调用结果的 observable。然后你就可以订阅了。

    【讨论】:

      【解决方案2】:

      我的解决方案:

       Observable<SignUpServerCode> signUp = networkBaseService.signUp(model.getSignUpRequest());
              signUp.subscribeOn(Schedulers.newThread())
                      .observeOn(AndroidSchedulers.mainThread())
                      .filter(element -> element.account_signup.code == 200 ? true : false)
                      .map(element -> createLoginRequest())
                      .flatMap(loginRequest -> logIn(loginRequest))
                      .filter(element -> element.account_login.code == 200 ? true : false)
                      .subscribe(new Subscriber<LoginServerCode>() {
                          @Override
                          public void onCompleted() {
                          }
      
                          @Override
                          public void onError(Throwable e) {
                          }
      
                          @Override
                          public void onNext(LoginServerCode loginServerCode) {
                          }
                      });
      
      private Observable<LoginServerCode> logIn(LogInRequest request){
              return  networkBaseService.logIn(request).subscribeOn(Schedulers.newThread())
                      .observeOn(AndroidSchedulers.mainThread());
          }
      

      【讨论】:

        猜你喜欢
        • 2017-09-07
        • 2016-03-29
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2018-05-31
        • 1970-01-01
        相关资源
        最近更新 更多