2015-06-09 18 views
14

के साथ कार्य को कैसे रद्द करें मेरे पास बाकी एपीआई है।रेट्रोफिट और rxjava

@Get("/serveraction") 
public Observable<String> myRequest(@Query("Data") String data); 

मुझे पता है, कि okhttp कार्यक्षमता को रद्द किया गया है (अनुरोध वस्तु से, टैग द्वारा), लेकिन कैसे पुराना वापस और rxjava के साथ उपयोग नहीं पता है। नेटवर्क कार्यों के लिए रेट्रोफिट और आरएक्सजेवा के साथ रद्द करने की व्यवस्था का एहसास करने का सबसे अच्छा तरीका क्या है?

उत्तर

20

आप मानक RxJava रद्द करने की व्यवस्था Subscription का उपयोग कर सकते हैं।

Observable<String> o = retrofit.getObservable(..); 
Subscription s = o.subscribe(...); 

// later when not needed 
s.unsubscribe(); 

रेट्रोफिट आरएक्सजेवा कनेक्टर इस कॉल को ओकेएचटीपी रद्द करने के लिए रीडायरेक्ट करेगा। यहां देखें: https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit2/RxJavaCallAdapterFactory.java#L102

+0

FYI: मुझे यकीन है कि [ObservableCallAdapterFactory] (https://github.com/square/retrofit/blob/master/retrofit-adapters/rxjava/src/main/java/retrofit/ObservableCallAdapterFactory.java) रेट्रोफिट में -डपेटर्स अभी तक रिलीज़ नहीं किए गए रेट्रोफिट 2.0 के हिस्से का हिस्सा बनने जा रहे हैं और वर्तमान में रेट्रोफिट 1.9 का हिस्सा नहीं हैं। @ सर्गी द्वारा ऊपर वर्णित अनुसार सदस्यता छोड़ने से अब भी आपके ग्राहक को प्रतिक्रिया प्राप्त नहीं हो जाएगी, लेकिन आंतरिक रूप से इसे कैसे रद्द किया जाता है, यह कम साफ है और आप कुछ थ्रेड बाधित अपवाद देख सकते हैं (लेकिन वे आपके ऐप को क्रैश नहीं करेंगे)। – Nick

+3

लिंक मर चुका है –

+0

धन्यवाद। अपडेट किया गया। –

1

चयनित उत्तर आरएक्स जावा 1 के लिए है और यह RxJava2 के लिए मान्य नहीं है। बाद के लिए, आप डिस्पोजेबल का उपयोग कर सकते हैं। इस का पालन करें:

  1. अपने Activity या कक्षा में Fragment में CompositeDisposable compositeDisposable=new CompositeDisposable() एक क्षेत्र के रूप में परिभाषित करें।
  2. एपीआई कुछ इस तरह के रूप में रेट्रोफिट 2 का उपयोग निर्धारित करें:

    public Observable<YourPojo> callApiWithRetrofit() { 
        return getService(YourApiService.class).callApi(); 
    } 
    
  3. परिभाषित Disposable और compositeDisposable उदाहरण में जोड़ें:

    Disposable disposable = callApiWithRetrofit().subscribeOn(Schedulers.io()).observeOn(
         AndroidSchedulers.mainThread()).subscribeWith(
         new DisposableObserver<List<YourPojo>>() { 
          @Override 
          protected void onStart() { 
           super.onStart(); 
          } 
    
          @Override 
          public void onNext(@NonNull List<AlertAssetDTO> listResponse) { 
    
          } 
    
          @Override 
          public void onError(@NonNull Throwable e) { 
    
          } 
    
          @Override 
          public void onComplete() { 
    
          } 
         }); 
    mCompositeDisposable.add(alertAssetsDisposable); 
    
  4. जहाँ भी आप चाहते हैं कनेक्शन रद्द कर दिया (उदाहरण के लिए onDestroy() आपके Activity या onDestroyView() की Fragment की विधि) mCompositeDisposable.clear();

एकाधिक डिस्पोजेबल को इस तरह से कंपोस्टी डिस्पोजेबल में जोड़ा जा सकता है।

+0

मूल (v1) उत्तर का सबसे महत्वपूर्ण हिस्सा यह है कि यह वास्तव में अनुरोध को रद्द करता है: '' 'रिट्रोफिट आरएक्सजेवा कनेक्टर इस कॉल को ओकेएचटीपी रद्द करने के लिए रीडायरेक्ट करेगा। यहां देखें: '' '.. इस उत्तर में लापता है (पुराना लिंक अब टूटा हुआ है) – minsk

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