2016-05-19 2 views
0

На самом деле я использую RxAndroid, Retrofit2.0 и Okhttp 3.2.0 в своем проекте. Я использую Observable.merge для вызова нескольких запросов для загрузки файлов. Есть ли решение отменить уникальный запрос? Я знаю, что могу использовать subscription.unsubscribe(), но он отменяет все задачи.Как отменить запрос с помощью слияния

Я использовал метод okhttp, такой как client.dispatcher.get (0) .cancel(), но он бросил мне исключение Io, например Canceled, и отменит все задачи.

У вас есть правильный способ отменить только выбранный запрос? Спасибо

ответ

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

Вы можете приложить использовать 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

Привет, Джон, я хочу сделать запрос в одно и то же время –

Смежные вопросы