我正在使用 RxJava2 和 Retrofit2 来处理网络请求。
我有一个循环,其中 doOnNext
应该始终运行,但是我的 Activity
是观察者,当它被销毁时调用 dispose()
并且导致改造以取消请求。
java.io.IOException: Canceled
有没有办法让请求完成但只处理 UI 级别的观察者?
mApi.doSomethingImportant()
.doOnNext(new Consumer<ImportantResponse>() {
@Override
public void accept(ImportantResponse response) throws Exception {
// Store data, should always get here if request is success
}
})
.doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// Store error, should always get here if request fails
}
})
.observeOn(AndroidSchedulers.mainThread())
.unsubscribeOn(AndroidSchedulers.mainThread())
.subscribe(observer); // observer reports success/fail on UI if not disposed
谢谢。
最佳答案
我找到了一种通过用另一种方式包裹观察者来实现所需行为的方法,但我确信有一些优雅的方法可以做到这一点。
...
.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();
}
}
}
关于android - 防止处理取消网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47794454/