2015-11-05 7 views
5

मैं नेटवर्क कॉल के लिए 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 पर मैंने सोचा कि RxJavaregisterUser()#ErrorHandler() पर अमल के बाद से मेरी registerUser सेवा कॉल अपवाद के साथ विफल रहा है, लेकिन इसके बजाय यह RxView#ErrorHandler() कहता है, है।

मैं नेटवर्क कॉल के दौरान अपवाद का ख्याल रखने के लिए registerUser()#ErrorHandler() कैसे बना सकता/सकती हूं?

+2

क्या अपवाद के स्टैकट्रेस है। यह संभव है कि आरएक्सजेवा भी शामिल होने से पहले ऐसा होता है। – akarnokd

+0

"ई" किस प्रकार का है? हो सकता है कि सभी अपवादों को पकड़ने के लिए पर्याप्त सामान्य नहीं है? – Yoshkebab

उत्तर

2

मेरा बुरा, नेटवर्क कॉल IllegalArgumentException के साथ विफल नहीं है लेकिन अनुरोध निर्माण IllegalArgumentException के साथ विफल रहा है।

java.lang.IllegalArgumentException: URL "users/" does not contain {email}". 
इसके बजाय पोस्ट शरीर के निर्माण के लिए @Field एनोटेशन का उपयोग करने का

, मैं गलती से @Path एनोटेशन का इस्तेमाल किया था।

सही परिभाषा:

@FormUrlEncoded @POST("users/") 
Observable<User> registerUser(@Field("email") String username, 
     @Field("password") String password, @Field("password_confirmation") String confirmPassword); 
संबंधित मुद्दे

 संबंधित मुद्दे