2016-11-18 86 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謝謝它是有用的,但不是我的問題。 –