实际上我在我的项目中使用RxAndroid,Retrofit2.0和Okhttp 3.2.0。 我使用Observable.merge来调用多个请求以上传文件。 有什么解决方案可以取消独特的请求吗?我知道我可以使用subscription.unsubscribe()但它会取消所有任务。
我使用了像client.dispatcher.get(0).cancel()这样的okhttp方法,但它给我一个像Canceled这样的Io Exception,它将取消所有任务。
您是否有正确的方法来取消所选的请求?谢谢
答案 0 :(得分:0)
你可以附加一个takeUntil(Observable a)
使用你的每个成分Observables并使用"控制"可观察到选择性取消它们。例如
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");
答案 1 :(得分: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( “取消”);