gpt4 book ai didi

android - 防止处理取消网络请求

转载 作者:行者123 更新时间:2023-11-30 00:13:16 28 4
gpt4 key购买 nike

我正在使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com