2016-09-05 8 views
7

नहीं कहा जाता है, पहले मैं यह बताने की कोशिश करूंगा कि मैं क्या करने की कोशिश कर रहा हूं, अगला आप देखेंगे कि मैं क्या कर रहा हूं (कोड)। चूंकि मैं आरएक्सजेवा में नया हूं, और अभी भी सीखना मुझे आपकी राय देने के लिए स्वतंत्र हो गया है।RxJava onError थ्रेड के अंदर हैंडलर नहीं बना सकता है जिसे Looper.prepare()

तो, मैं सर्वर से नेटवर्क एपीआई को कॉल कर रहा हूं और जब अनुरोध शुरू करता हूं तो मैं लोडर (स्पिनर) को कॉल करता हूं, जब मैं इसे छिपाता हूं और जब मुझे कोई त्रुटि मिलती है तो वही होता है। मैं अपने सभी अनुरोधों के लिए यह सामान्य चाहता हूं इसलिए मुझे पैरामीटर से अवलोकन और पर्यवेक्षक मिलते हैं। इस विधि पर, मुझे सिर्फ छिपाने और लोडर दिखाने की परवाह है।

ऑनरर (और यहां चाल भाग है), मैं भी एक संवाद दिखाने की कोशिश कर रहा हूं, लेकिन मुझे त्रुटि मिली है जिसे आप शीर्षक पर देख सकते हैं। धागा अंदर हैंडलर कि Looper.prepare आह्वान नहीं किया()

यहाँ कोड है ..

protected void makeMyrequest(MyBaseActivity myBaseActivity, Observable observable, Observer observer) { 

    mSubscription = observable 
      .doOnRequest(new Action1<Long>() { 
       @Override 
       public void call(Long aLong) { 

        Log.d(TAG, "On request"); 
        myBaseActivity.showLoader(); 
       } 
      }) 
      .doOnCompleted(new Action0() { 
       @Override 
       public void call() { 
        Log.d(TAG, "onCompleted: Hide spinner"); 
        myBaseActivity.hideLoader(); 
        mSubscription.unsubscribe(); 
       } 
      }) 
      .doOnError(new Action1<Throwable>() { 
       @Override 
       public void call(Throwable throwable) { 

        Log.d(TAG, "onError: Hide spinner"); 
         myBaseActivity.showAlertDialog("error"); 
         myBaseActivity.hideLoader(); 

             } 
      }) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(observer); 
} 

नहीं बना सकता मेरी आधार गतिविधि पर मैं संवाद

दिखाने के लिए एक विधि है
public void showAlertDialog(String message) { 

    mDialog = new AlertDialog.Builder(this) 
      .setMessage(message) 
      .show(); 
} 

बात यह है कि stacktracer से मायने रखती है

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
                       at android.os.Handler.<init>(Handler.java:200) 
                       at android.os.Handler.<init>(Handler.java:114) 
                       at android.app.Dialog.<init>(Dialog.java:119) 
                       at android.app.Dialog.<init>(Dialog.java:168) 
                       at android.support.v7.app.AppCompatDialog.<init>(AppCompatDialog.java:43) 
                       at android.support.v7.app.AlertDialog.<init>(AlertDialog.java:95) 
                       at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:927) 
                       at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:952) 
                       at xx.myapp.MyBaseActivity.showAlertDialog 
+0

आपको स्टैक ट्रेस शामिल करने की आवश्यकता है, अन्यथा कोई भी आपको बता सकता है कि अपवाद कहां उत्पन्न होता है। – Kiskae

उत्तर

10

doOnRequest से पहले आपको observeOn(AndroidSchedulers.mainThread()) पर कॉल करने की आवश्यकता है। observeOn कॉल के एक श्रृंखला पर उसके बाद सभी ऑपरेटरों पर लागू होता है। आपके मामले में अपवाद उठाया गया क्योंकि आप मुख्य धागे के बाहर एक संवाद बनाने की कोशिश कर रहे हैं।

+0

अच्छा, यह काम करता है .. धन्यवाद .. लेकिन क्या आप मुझे एक संक्षिप्त स्पष्टीकरण दे सकते हैं, इसलिए मैं दोहराना नहीं चाहूंगा? – user1851366

+0

यहां इसके बारे में एक अच्छा लेख है http://tomstechnicalblog.blogspot.fi/2016/02/rxjava-understanding-observeon-and.html –

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

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