2015-01-14 6 views
6

1st, मैंने कोशिश कीonError (RxJava) के बाद ग्राहक को रखने के लिए कैसे

// used retrofit 
public interface ApiService { 
    @GET(/get_some_data) 
    Observable<SomeData> getSomeData(); 
} 



// clickStream created by onClick event 
// No.1 
clickStream 
    .flatMap(e -> apiService.getSomeData()) 
    .subscribe(
     success -> Log.d("tag", "success"), 
     error -> Log.d("tag", "error"), 
     () -> Log.d("tag", "complete")) 

इस करता है, तो getSomeData() सफलता है ठीक है। मैं प्रत्येक क्लिक कुछ डेटा प्राप्त कर सकते हैं।

लेकिन अगर त्रुटि होती है, तो सदस्यता समाप्त हो जाती है। (ताकि क्लिक त्रुटि के बाद काम करता है नहीं है)


2, मैं नीचे। (OnErrorResumeNext साथ), लेकिन सदस्यता रद्द कर दी की कोशिश की।

(onError फोन नहीं किया, लेकिन onComplete कहा जाता है। इसलिए सदस्यता रद्द कर दी)

// No.2 
clickStream 
    .flatMap(e -> apiService.getSomeData()) 
    .onErrorResumeNext(throwable -> Observable.empty()) // add this line 
    .subscribe(
     success -> Log.d("tag", "success"), 
     error -> Log.d("tag", "error"), 
     () -> Log.d("tag", "complete")) 

3, मैं नीचे की कोशिश की। (पुन: प्रयास के साथ)

// No.3 
clickStream 
    .flatMap(e -> apiService.getSomeData()) 
    .retry(5)           // add this line 
    .subscribe(
     success -> Log.d("tag", "success"), 
     error -> Log.d("tag", "error"), 
     () -> Log.d("tag", "complete")) 

इस नहीं से बेहतर है .1। लेकिन अनुसूचित।


मैं रीफ्रेश बटन बनाना चाहता हूं जो त्रुटि के बाद काम करता है।

मैं जानना चाहता

  1. मैं रख सकते या फिर से सदस्यता ले ग्राहक चाहते हैं?
  2. क्या यह आरएक्सजेवा में एक उचित तरीका है?

मेरी खराब अंग्रेजी के लिए खेद है।

उत्तर

8

आपका एनआर। 2 काफी करीब था - इस प्रयास करें:

clickStream 
.flatMap(e -> apiService.getSomeData() 
    .onErrorResumeNext(throwable -> Observable.empty())) // add this line 
.subscribe(
    success -> Log.d("tag", "success"), 
    error -> Log.d("tag", "error"), 
    () -> Log.d("tag", "complete")) 

सूचना है कि मैं सिर्फ इतना है कि onErrorResumeNext अब हर त्रुटि के बाद कहा जाता है एक समापन कोष्ठक चले गए और "आंतरिक" प्रत्यक्ष का हिस्सा है।

+0

यह काम किया! मैं ईरर के बाद ग्राहक रख सकता हूँ। कुंजी "** आंतरिक ** पर्यवेक्षक" है। धन्यवाद! – kyanro

+0

यह हर त्रुटि को छुपा/दबाता है? –

+0

हां, ज़ाहिर है - या तो आपको 'ऑनर' मिलता है या आप 'सब्सक्राइबर 'का उपयोग जारी रख सकते हैं, लेकिन दोनों नहीं। आप क्या कर सकते हैं, यद्यपि, कुछ त्रुटि संदेश प्रकार उत्सर्जित कर रहा है: 'फेंकने योग्य -> ​​Observable.just (नया वहाँ WASSomeProblemWithTheApi()) ''। 'पर्यवेक्षक ' में 'टी' 'को कुछ सामान्य इंटरफ़ेस होना चाहिए जो' वहां व्हाट्सएमप्रोमलेम विथ द एपीआई 'और आपके वास्तविक डेटा प्रकार द्वारा साझा किया गया है। –

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