मैं और rxJava/एंड्रॉयड के लिए नए और आश्चर्य है कि मेरे onError
लैम्ब्डा कभी कभी मुख्य-धागे पर कहा जाता है कभी कभी नहीं हूँ, हालांकि मैं का उपयोग मुख्य थ्रेड में RxAndroid त्रुटियों को संभालने के लिए .observeOn(AndroidSchedulers.mainThread())
कैसे
उदाहरण 1 : मुख्य धागा
पर onError
इस अपेक्षा के अनुरूप काम करता है: onError
मुख्य-धागे पर कहा जाता है
Observable.error(new RuntimeException("RTE"))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> {
Log.e(TAG, "onNext("+s+")-thread: " + Thread.currentThread().getName());
},
throwable -> {
Log.e(TAG, "onError()-thread: " + Thread.currentThread().getName());
});
लॉग-उत्पादन:
onError()-thread: main
उदाहरण 2: onError
नहीं मुख्य-धागे पर
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("one and only");
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.timeout(1, TimeUnit.SECONDS)
.subscribe(s -> {
Log.e(TAG, "onNext("+s+")-thread: " + Thread.currentThread().getName());
},
throwable -> {
Log.e(TAG, "onError()-thread: " + Thread.currentThread().getName());
});
उत्पादन कुछ इस तरह है:
onNext(one and only)-thread: main
onError()-thread: RxComputationScheduler-4
मैंने सोचा था कि observeOn(AndroidSchedulers.mainThread()) बुला के बाद, सभी उत्सर्जन होना चाहिए मुख्य धागे पर किया।
- मैं किसी भी प्रलेखन कि किन परिस्थितियों
onError
जो सूत्र में कहा जाता है के तहत निर्दिष्ट करता नहीं पा सके:तो मैं इन सवालों की है। कोई भी एक लिंक जानता है?
- मैं निश्चित रूप से कर जीयूआई में कुछ त्रुटि-संकेत प्रदर्शित करना चाहते हैं: तो कैसे मैं हमेशा मुख्य-सूत्र में कहा जा
onError
मजबूर कर सकते हैं?
यहाँ और अधिक विवरण के साथ एक अच्छा ब्लॉग पोस्ट है लेकिन [observOn()] (http://reactivex.io/documentation/operators/observeon.html) को उस डिफ़ॉल्ट को ओवरराइड करना चाहिए, है ना? – TmTron