私はRetrofit
をネットワークコールではRxJava
、表示操作ではRxBinding
と使用しています。サインアップ画面で、[登録]ボタンをクリックすると、MyApi
サービスを使用してローカルサーバーに情報をポストしています。RxJavaで `IllegalArgumentException`を処理する方法は?
SignupActivity.class
mCompositeSubscription.add(RxView.clicks(mRegisterButton).debounce(300, TimeUnit.MILLISECONDS).
subscribe(view -> {
registerUser();
}, e -> {
Timber.e(e, "RxView ");
onRegistrationFailed(e.getMessage());
}));
private void registerUser() {
mCompositeSubscription.add(api.registerUser(mEmail,
mPassword, mConfirmPassword)
.subscribe(user -> {
Timber.d("Received user object. Id: " + user.getUserId());
}, e -> {
Timber.e(e, "registerUser() ");
onRegistrationFailed(e.getMessage());
}));
}
MyApi.class
public Observable<User> registerUser(String username, String password, String confirmPassword) {
return mService.registerUser(username, password, confirmPassword)
.compose(applySchedulers());
}
@SuppressWarnings("unchecked") <T> Observable.Transformer<T, T> applySchedulers() {
return observable -> observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
MyService.class
@FormUrlEncoded @POST("users/")
Observable<User> registerUser(@Path("email") String username,
@Path("password") String password, @Path("password_confirmation") String confirmPassword);
コール私が無効な情報を投稿しているので、IllegalArgumentException
で失敗します。私の主な問題は何
はIllegalArgumentException
時に私は私のregisterUser
サービスコールが例外で失敗しましたが、代わりに、それはRxView#ErrorHandler()
を呼び出すので、RxJava
がregisterUser()#ErrorHandler()
を実行するだろうと思っています。
registerUser()#ErrorHandler()
は、ネットワークコール中に発生した例外を処理するにはどうすればよいですか?
。 RxJavaが関与する前に起こる可能性があります。 – akarnokd
"e"の種類は何ですか?すべての例外をキャッチするのに十分な一般性はないのでしょうか? – Yoshkebab