2017-06-15 32 views
8

मैं एक नेटवर्क अनुरोध कर रहा हूं जहां मैं फाइलें और संदेश भेजता हूं। मैं वर्तमान अनुरोध को रद्द करने का विकल्प चाहता हूं। मुझे दो समान प्रश्न मिल गए हैं और दोनों सुझाव देते हैं कि observable.subscribe(Observer) सदस्यता ऑब्जेक्ट देता है जिसमें विधि unsubscribe() है।रेट्रोफिट 2 + आरएक्सजेवा रद्द/सदस्यता रद्द करें

Here is the first one

And the second one

मेरे मामले में, मैं observable.subscribe(Observer) जो शून्य है का उपयोग करें। यहां मेरा कोड है:

Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts); 
     observable.subscribe(new Observer<MessengerRaw>() { 
      @Override 
      public void onSubscribe(Disposable d) { 

      } 

      @Override 
      public void onNext(MessengerRaw value) { 
       if (getView() != null) { 
        ((MessengerActivity) getView()).resetMessegeView(); 
        ((MessengerActivity) getView()).updateMessageList(); 
       } 
      } 

      @Override 
      public void onError(Throwable e) { 
       getData().remove(0); 
       if (getView() != null) { 
        ((MessengerActivity) getView()).updateMessageList(); 
       } 
      } 

      @Override 
      public void onComplete() { 
       hideProgress(); 
      } 
     }); 

तो मैं अपना अनुरोध कैसे रद्द/रद्द कर सकता हूं? धन्यवाद।

उत्तर

8

आरएक्सजेवा 2 में, आप ऑस्सेवर की सदस्यता कॉलबैक विधि पर डिस्पोजेबल ऑब्जेक्ट प्राप्त कर सकते हैं, जिसका उपयोग आप सदस्यता का निपटान करने के लिए कर सकते हैं।

+0

मैं इस उत्तर को स्वीकार के रूप में चिह्नित करूंगा क्योंकि यह सीधे समाधान को इंगित करता है। पहले स्वीकृत उत्तर ठीक से संपादित नहीं किया गया था। चीयर्स। – Sermilion

0

आप दस्तावेज़ से Observable.subsribeWith(Observer)

उदाहरण का उपयोग कर सकते हैं:

Observable<Integer> source = Observable.range(1, 10); 
CompositeDisposable composite = new CompositeDisposable(); 

ResourceObserver<Integer> rs = new ResourceObserver<>() { 
    // ... 
}; 

composite.add(source.subscribeWith(rs)); 
+3

मेरा प्रश्न है "सदस्यता कैसे रद्द करें"। मैं नहीं देखता कि आपका उत्तर किसी प्रासंगिकता का कैसा है। – Sermilion

2

RXJava में आप आप सदस्यता समाप्त करना चाहते हैं के लिए सदस्यता समाप्त

private Subscription mSubscription; 

/.../ 

Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts); 
Subscription subscription = observable.subscribe(new Observer<MessengerRaw>() {/.../}); 

सदस्यता का उपयोग करना चाहिए आप कॉल कर सकते हैं

if(!subscription.isUnsubscribed()){ 
    subscription.unsubscribe(); 
} 

आरएक्सजेवा 2 observable.subscribe(new Observer<MessengerRaw>() {/.../}); डिस्पोजेबल ऑब्जेक्ट देता है, आप निपटान();

+1

observable.subscribe (नया पर्यवेक्षक () {/.../}); ओवरलोडेड संस्करण नहीं है जो सदस्यता देता है। ऐसे संस्करण हैं जो डिस्पोजेबल, अवलोकन योग्य , और शून्य लौटाते हैं। – Sermilion

+0

आप निपटान(); –

+1

आप सही हैं: @ ओवरराइड सार्वजनिक शून्य पर सदस्यता लें (डिस्पोजेबल डी) { } में डिस्पोजेबल है जिस पर मैं निपटान() का अनुरोध कर सकता हूं और रद्द कर सकता हूं। धन्यवाद। आप अपने उत्तर में शामिल कर सकते हैं ताकि अन्य इसे तुरंत देख सकें। – Sermilion

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