处理Observable

时间:2016-11-18 14:16:24

标签: java android rx-java observable subscriber

问题描述

我有一个简单的函数buildUseCaseObservable的类。功能应该遵循

  1. 首先尝试从Internet获取数据
    • 如果成功将数据写入数据库
    • 如果失败,例如:ServerUnavailableSocketException应该从数据库中读取数据,并且还应报告错误。
    • 如果接收数据,但数据为空或空,则应从数据库中读取数据。
  2. 基本上一切都像预期的那样工作,除了粗体点。如果在从网络获取数据时出现问题,则仅调用onError并且不会调用onNext

    我发现有一种名为onErrorResumeNext的方法基本上可以满足我的需求,但在这种情况下,我失去了错误(onError未被调用,而是onNext被称为)

    问题

    这样的方法是onCompleteWithError还是没有如何实现这样的事情而不会丢失错误?

    @PerActivity
    public class DataInteractor extends Interactor {
    
        private RestService rest;
        private DataService data;
    
        @Inject
        AuthorsInteractor(RestService rest, DataService data) {
            this.rest = rest;
            this.data = data;
        }
    
        @Override
        protected Observable buildUseCaseObservable() {
            return Observable.concat(
                    rest.getData().doOnNext(data -> data.setAuthors(authors)),
                    data.getData())
                    .first(data -> data != null && !authors.isEmpty());
        }
    }
    

1 个答案:

答案 0 :(得分:3)

不幸的是,在您的情况下,onError()onNext()似乎是互斥的。我要使用的是一个允许您返回结果和错误的类:

public static class Result<T> {
  T data;
  Throwable error;
}

然后onErrorResumeNext()看起来像:

.onErrorResumeNext(throwable -> new Result(data.getData(), throwable))