2015-11-12 6 views
10

कोई मुझे समझा सकता है कि क्यों इस तरह कोड:एंड्रॉयड doOnError पर रेट्रोफिट साथ क्यों RxJava() काम नहीं करता है, लेकिन सब्सक्राइबर onError

networApi.getList() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .doOnError(throwable -> { 
       throwable.getMessage(); 
      }) 
      .doOnNext(list -> { 
       coursesView.populateRecyclerView(list); 
       courseList = (List<Course>) courses; 
      }).subscribe(); 

अगर कोई इंटरनेट doOnError में चला जाता है, लेकिन यह आगे तो फेंकता एप्लिकेशन नीचे चला जाता है, लेकिन इस तरह कोड:

networkApi.getList() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<List<? extends Course>>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable e) { 
        e.getMessage(); 
       } 

       @Override 
       public void onNext(List<? extends Course> list) { 
        coursesView.populateRecyclerView(list); 
        courseList = (List<Course>) list; 
       } 
      }); 

कार्य मैं कैसे उम्मीद करते हैं, इसका मतलब है जब कोई इंटरनेट कनेक्शन यह कुछ भी नहीं

चियर्स करता है Wojtek

उत्तर

22

असल में, doOnError नहीं संभाल त्रुटि है कि यह यह उपभोग नहीं करता है, इस अर्थ में। यह सिर्फ इसके साथ कुछ करता है, उदाहरण के लिए, इसे लॉग करें। (यह doOnNext के लिए भी सच है - यह आइटम का उपभोग नहीं करता है और आइटम Subscriber के onNext में अभी भी समाप्त होता है)।

त्रुटि अभी भी श्रृंखला को भेज दी गई है और अभी भी आपके Subscriber के onError में समाप्त हो जाएगी।

मुझे यकीन है कि आपका ऐप OnErrorNotImplementedException के साथ क्रैश हो रहा है और ऐसा इसलिए है क्योंकि आपके पास Subscriber कोई नहीं है और इसलिए onError विधि नहीं है।

+0

आप पूरी तरह से सच हैं। इसे साफ़ करने के लिए धन्यवाद। –

+0

@ david.mihola HTTP स्थिति कोड को संभालने का कोई तरीका है retrofit बीटा 2 के साथ त्रुटि? – halfred

+1

आह को पहले से ही उत्तर मिला: http://stackoverflow.com/a/33075870/1438480 – halfred

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