RxJava将Observables与多个请求相结合

时间:2015-11-19 12:28:08

标签: android retrofit rx-java

我在rx vs retrofit架构中遇到了一些问题。

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

                    }
                });

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我的解决方案:

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