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