2016-05-19 10 views
0

実際に私のプロジェクトではRxAndroid、Retrofit2.0、Okhttp 3.2.0を使用しています。 ファイルをアップロードするためにObservable.mergeを使用して複数のリクエストを呼び出しています。 一意のリクエストをキャンセルするソリューションはありますか?私はsubscription.unsubscribe()を使用できますが、すべてのタスクをキャンセルします。マージを使用してリクエストをキャンセルする方法

私はclient.dispatcher.get(0).cancel()のようなokhttpメソッドを使用しましたが、キャンセルされたようなIo Exceptionがスローされ、すべてのタスクがキャンセルされます。

選択したリクエストのみをキャンセルするには適切な方法がありますか?

答えて

0

これはうまくいきます。これは、コードです:。

   PublishSubject control = PublishSubject.create(); 
       publishSubjectMap.put(position, control); 
       Observable<Response<Upload>> cancellableRestrofitObservable = dropboxapi.uploadImage(requestBody, params, position) 
         .subscribeOn(Schedulers.io()) 
         .observeOn(AndroidSchedulers.mainThread()) 
         .takeUntil(control.asObservable()); 
       observables.add(cancellableRestrofitObservable); 


     Observable<Response<Upload>> mergedObservable = Observable.merge(observables); 

//キャンセルする publishSubjectMap.get(event.getPosition())onNext( "キャンセル");

0

構成可能なObservableのそれぞれにtakeUntil(Observable a)を使用し、「制御」観測値を使用して選択的にキャンセルすることができます。たとえば

PublishSubject<Object> control1 = PublishSubject.create(); 
PublishSubject<Object> control2 = PublishSubject.create(); 

Observable<T> cancellableRestrofitObservable1 = retrofitObservable1.takeUntil(control1.asObservable()); 
Observable<T> cancellableRestrofitObservable2 = retrofitObservable2.takeUntil(control2.asObservable()); 

Observable<T> mergedObservable = Observable.merge(cancellableRestrofitObservable1,cancellableRestrofitObservable2); 

// To cancel retrofitObservable1 
control1.onNext("cancel"); 
+0

こんにちはJohn、私は同時に複数のリクエストをしたい –

関連する問題