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

标签 java android retrofit rx-java rx-java2

当我从 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/

相关文章:

java - PyQt/Qt 是否有类似于 MigLayout 的布局管理器?

java - Android selectableItemBackgroundBorderless

android - 使用 robolectric 测试改造 2,未调用回调

android - 如何给RxJava+Retrofit 添加刷新 token 逻辑?

java - java中大十进制精度零是什么意思

java - 在 Java FXML 标记文件中运行 Java 代码

android - 使用最新版本的 Firebase list 合并失败

android - 从待处理Intent上的堆栈中删除启动器 Activity

android - 如何在 Firebase Analytics 中按语言过滤?

android - 在上传到 android 中的服务器之前在预览中显示图像