मैं नेटवर्क कॉल के लिए RxJava
के साथ Retrofit
का उपयोग कर रहा हूं और दृश्य संचालन के लिए RxBinding
का उपयोग कर रहा हूं। साइनअप स्क्रीन में, 'रजिस्टर' बटन पर क्लिक करने पर मैं MyApi
सेवा का उपयोग कर स्थानीय सर्वर को जानकारी पोस्ट कर रहा हूं।आरएक्सजेवा में `अवैध अर्ग्यूमेंट अपवाद 'को कैसे संभालें?
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
पर मैंने सोचा कि RxJava
registerUser()#ErrorHandler()
पर अमल के बाद से मेरी registerUser
सेवा कॉल अपवाद के साथ विफल रहा है, लेकिन इसके बजाय यह RxView#ErrorHandler()
कहता है, है।
मैं नेटवर्क कॉल के दौरान अपवाद का ख्याल रखने के लिए registerUser()#ErrorHandler()
कैसे बना सकता/सकती हूं?
क्या अपवाद के स्टैकट्रेस है। यह संभव है कि आरएक्सजेवा भी शामिल होने से पहले ऐसा होता है। – akarnokd
"ई" किस प्रकार का है? हो सकता है कि सभी अपवादों को पकड़ने के लिए पर्याप्त सामान्य नहीं है? – Yoshkebab