Как отменить запрос с помощью слияния

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

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

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


person Deeptha Wickrema    schedule 19.05.2016    source источник


Ответы (2)


Вы можете прикрепить использование takeUntil(Observable a) к каждому из ваших составляющих Observables и использовать наблюдаемое «control», чтобы выборочно отменить их. Например

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");  
person JohnWowUs    schedule 20.05.2016
comment
Привет, Джон, я хочу сделать несколько запросов одновременно - person Deeptha Wickrema; 20.05.2016

Это работает хорошо. Это код:

                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);

//Для отмены публикацииSubjectMap.get(event.getPosition()).onNext("cancel");

person Deeptha Wickrema    schedule 29.05.2016