Я изо всех сил пытаюсь понять, как поднять сетевую ошибку с уровня данных на уровень представления.
Я использую Room вместе с RxJava2 и Retrofit2. Я реализую шаблон репозитория как локальный, поэтому я запрашиваю локальные данные, извлекая их с удаленного компьютера и обновляя локальные данные, если это необходимо. В коде это будет:
public Flowable<List<DEvent>> getAll() {
return db.dEventDataStore().getAll()
.doOnSubscribe(new Consumer<Subscription>() {
@Override
public void accept(final Subscription subscription) throws Exception {
dEventApi.getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new MaybeObserver<List<DEvent>>() {
@Override
public void onSubscribe(@NonNull Disposable disposable) {
Timber.d("Remote onSubscribe");
}
@Override
public void onSuccess(@NonNull List<DEvent> dEvents) {
Timber.d("Remote onSuccess!");
db.dEventDataStore().insertAll(dEvents);
}
@Override
public void onError(@NonNull Throwable throwable) {
Timber.d("Remote onError!");
}
@Override
public void onComplete() {
Timber.d("Remote onComplete!");
}
}
);
}
});
}
И в слое просмотра:
mDisposable.add(repo.getAll()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<DEvent>>() {
@Override
public void accept(List<DEvent> dEvents) throws Exception {
Timber.d("OnNext!!");
mView.showEvents(dEvents);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Timber.e("Error on getting DEvents - " + Log.getStackTraceString(throwable));
}
}));
Как я могу испустить этот бросок?