Ich verwende Retrofit
mit RxJava
für die Netzwerkanrufe und RxBinding
für Ansicht Operationen. Im Anmeldungsbildschirm, wenn ich auf "Registrieren" klicke, poste ich die Informationen auf dem lokalen Server unter Verwendung des MyApi
Dienstes.Wie behandelt man die `IllegalArgumentException` in RxJava?
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);
Der Aufruf scheitert mit IllegalArgumentException
, da ich eine ungültige Info poste.
Was mein Hauptproblem ist, ist, auf IllegalArgumentException
Ich dachte RxJava
registerUser()#ErrorHandler()
ausführen würde, da mein registerUser
Service-Aufruf mit Ausnahme gescheitert, sondern nennt es RxView#ErrorHandler()
.
Wie kann ich registerUser()#ErrorHandler()
machen/erzwingen, um auf die während des Netzwerkaufrufs aufgetretene Ausnahme zu achten?
Was der Stacktrace der Ausnahme. Es ist möglich, dass es passiert, bevor RxJava überhaupt beteiligt ist. – akarnokd
Welcher Typ ist "e"? Vielleicht ist es nicht allgemein genug, um alle Ausnahmen zu erfassen? – Yoshkebab