2015-12-10 7 views
6

के साथ अनुरोध को रद्द कैसे करें मैं अपने एपीआई लोड करने के लिए रेट्रोफिट 2.0 और आरएक्स-एंड्रॉइड का उपयोग कर रहा हूं। मैं RxJava Integration with CallAdapter पर this site पर अनुभाग का पालन करता हूं और यह ठीक काम करता है। लेकिन, मुझे नहीं पता कि अवलोकन करने योग्य ऑब्जेक्ट के साथ लोडिंग अनुरोध को कैसे रद्द किया जाए। कृपया मुझे एक विचार देने में मदद करें।retofit2 और RxAndroid

उत्तर

17

RxJava पर्यवेक्षण निष्पादन को रद्द करने का एकमात्र तरीका - इससे सदस्यता समाप्त करें। RxJavaCallAdapter okhttp क्लाइंट को रद्द करने का प्रतिनिधि होगा।

तो, आप सरल इस तरह ख़ाली है:

Subscription subscription = getObservable().subscribe(); 

//When you want to stop execution 
subscription.unsubsribe(); 

आप कोड here की जाँच कर सकते हैं। कोड

final Call<T> call = originalCall.clone(); 

// Attempt to cancel the call if it is still in-flight on unsubscription. 
subscriber.add(Subscriptions.create(new Action0() { 
    @Override public void call() { 
    call.cancel(); 
    } 
})); 
+0

मैं बस 'unsubsribe()' का परीक्षण करता हूं और देखता हूं कि यह काम करता है। ग्राहक को और नहीं कहा जाएगा। लेकिन क्यों okhttp लॉग कई बार प्रिंट प्रिंट करता है। मैं कैसे जांच सकता हूं कि okhttp रद्द कर दिया जाएगा? –

+1

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

+0

धन्यवाद, Vasilov। चूंकि यह एकमात्र तरीका है, जब तक मुझे बेहतर समाधान नहीं मिल जाता तब तक मैं इसका उपयोग करूंगा –

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