gpt4 book ai didi

java - 如何让 RxJava 调用 onErrorReturn() 并仍然执行 onError()

转载 作者:行者123 更新时间:2023-12-01 19:30:19 26 4
gpt4 key购买 nike

当我从 MainViewModel 调用 Retrofit 方法 GetTodoRepository.fetchTodo() 并且调用以失败或任何非成功结果结束时,我想让 RxJava两者都执行 onErrorReturn()onError() 因此我可以在这种情况下返回缓存的对象,但仍然通知 MainViewModel 发生了错误,这样我就可以显示与错误相关的 UI View 。我该如何存档?

当前代码显示了我打算如何处理它。

MainViewModel

public class MainViewModel extends ViewModel

public LiveData<String> getTodo() {
getTodoRepository.fetchTodo().subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}

@Override
public void onSuccess(String s) {
showProgressAnim.setValue(false);
todo.setValue(s);
}

@Override
public void onError(Throwable e) {
showProgressAnim.setValue(false);
errorMsg.setValue(e.getMessage());
}
});
return todo;
}
}

获取TodoRepository

public class GetTodoRepository {

public Single<String> fetchTodo() {
return retrofit.create(TodoApi.class)
.getTodo()
.doOnSuccess(s -> cacheManager.saveTodo(s))
.onErrorReturn(throwable -> cacheManager.getTodo())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}

最佳答案

您不能同时使用 Single 的两种信号类型,但您可以将 fetchTodo() 转换为 Observable 并发出缓存的项目并错误一起:

fetchTodo()
.toObservable()
.onErrorResumeNext(error ->
Observable.just(cached)
.concatWith(Observable.error(error))
)

关于java - 如何让 RxJava 调用 onErrorReturn() 并仍然执行 onError(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59939802/

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