防止处理取消网络请求

时间:2017-12-13 13:42:38

标签: android retrofit2 rx-java2

我正在使用RxJava2和Retrofit2来处理网络请求。

我的循环中应该始终运行<optional>,但我的doOnNext是观察者在销毁时调用Activity并导致改进取消请求。

dispose()

有没有办法让请求完成但只处理UI级别的观察者?

java.io.IOException: Canceled

感谢。

1 个答案:

答案 0 :(得分:1)

我找到了一种通过将观察者包装成另一种来实现所需行为的方法,但我确信有一些优雅的方法可以做到这一点。

...
.subscribe(new NonDisposableObserver<>(observer)

以下NonDisposableObserver班级:

public class NonDisposableObserver<T> implements Observer<T> {

    private DisposableObserver<T> observer;

    public NonDisposableObserver(DisposableObserver<T> observer) {
        this.observer = observer;
    }

    @Override
    public void onSubscribe(Disposable d) {
    }

    @Override
    public void onNext(T t) {
        if (!observer.isDisposed()) {
            observer.onNext(t);
        }
    }

    @Override
    public void onError(Throwable e) {
        if (!observer.isDisposed()) {
            observer.onError(e);
        }
    }

    @Override
    public void onComplete() {
        if (!observer.isDisposed()) {
            observer.onComplete();
        }
    }
}