2016-11-18 12 views
0

Описание проблемы

У меня есть простой класс с простой функцией buildUseCaseObservable. Функция должна выполнить следующиеОшибка обработки в Observable

  1. Try, чтобы получить данные из Интернета первого
    • Если удастся записи данных в базу данных
    • Если не удалось с исключениями, такими как: 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()); 
    } 
} 

ответ

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 спасибо, это полезно, но не для моего вопроса. –