RxJava为多个请求组合Observables



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

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

我的任务提出注册请求,过滤结果,如果成功,再提出一个登录请求,最后我应该有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) {
                    }
                });

您可以将signUp调用/observable平面映射为一个可观察对象,该可观察对象会发出登录调用的结果。然后你就可以订阅了。

我的解决方案:

 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());
    }

最新更新