我在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) {
}
});
答案 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());
}