我有一个简单的函数buildUseCaseObservable
的类。功能应该遵循
ServerUnavailable
,SocketException
应该从数据库中读取数据,并且还应报告错误。 基本上一切都像预期的那样工作,除了粗体点。如果在从网络获取数据时出现问题,则仅调用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());
}
}
答案 0 :(得分:3)
不幸的是,在您的情况下,onError()
和onNext()
似乎是互斥的。我要使用的是一个允许您返回结果和错误的类:
public static class Result<T> {
T data;
Throwable error;
}
然后onErrorResumeNext()
看起来像:
.onErrorResumeNext(throwable -> new Result(data.getData(), throwable))