2
如何將observable的錯誤轉換爲另一個observable?將RxJava observable的錯誤轉換爲另一個可觀察和吞下的成功
我想實現算法顯示以下方案:
我使用了一個名爲所著的Grokking RxJava教程,開始我的學習,發現flatMap運營商可以將一個可觀察返回由改造成另一種這使我可以執行一系列服務器方法的調用。但在教程鏈接方法總是返回成功的結果。 如果其中一個遠程方法返回錯誤,我該如何做相同的鏈接?
目前我使用的是看起來很奇怪和不明確的,以我的方法:
AppObservable.bindActivity(this, userService.checklogin(mPhone)
.onErrorResumeNext(new Func1<Throwable, Observable<? extends Response>>() {
@Override
public Observable<? extends Response> call(Throwable throwable) {
return Observable.just(null);
}
}))
.flatMap(new Func1<Response, Observable<Response>>() {
@Override
public Observable<Response> call(Response response) {
if (response == null) {
return AppObservable.bindActivity(RegistrationActivity.this, userService.register(
mPhone,
name.getText().toString(),
selectedSex,
selectedDateDay,
selectedDateMonth,
selectedDateYear,
Locale.getDefault().getLanguage(),
persistentUserInfoStore.getInstallationToken()
));
}
phone.setError(getString(R.string.already_registered_phone));
progressDialog.dismiss();
return Observable.empty();
}
})
.subscribe(new Action1<Response>() {
@Override
public void call(Response response) {
startConfirmationActivity();
progressDialog.dismiss();
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
progressDialog.dismiss();
Toast.makeText(RegistrationActivity.this, "Error while register user", Toast.LENGTH_SHORT).show();
}
});
是否有更清晰的方式來做到這一點。
P.S.我在RxJava非常新。
你爲什麼不從'onErrorResumeNext'函數調用'userService.register'? –
@VladimirMironov我不知道之後會發生什麼。如果我理解正確,在傳遞userService.register到onErrorResumeNext以防可觀察的userService.checkLogin中的錯誤時,它的訂閱者將被重新訂閱到userService.register,並且將消耗其排放。我怎樣才能從userService.register和userService.checkLogin中分離出成功的排放? –
http://pastebin.com/Cu32c8tc怎麼樣? –