2016-11-18 54 views
0

问题描述

我有一个简单的类,功能简单buildUseCaseObservable。功能应该做以下Observable中的处理错误

  1. 尝试从互联网第一
    • 获取数据如果成功写入数据到数据库
    • 如果有类似的异常失败:ServerUnavailableSocketException应读取数据库中的数据,也应该报告错误。
    • 如果收到数据,但数据为空或为空,则应从数据库中读取数据。

基本上一切工作像预期,除了大胆点。如果从Web获取数据时发生问题,则只调用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()); 
    } 
} 

回答

3

不幸的是,你的情况好像onError()onNext()将是互斥的。我会去的是一个类,可以让你同时返回结果和错误:

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

然后onErrorResumeNext()会是什么样子:

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

,是有做一些更优雅的方式我想做的事 ? –

+1

[此博客文章](http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/)可能对您有用@VictorApoyan。干杯。 –

+0

@YeMinHtut谢谢它是有用的,但不是我的问题。 –