1
我在努力研究如何从数据层向视图层提出网络错误。在Retrofit + RxJava2 +房间处理网络错误
我正在使用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));
}
}));
我怎么能发射出抛出?
谢谢!按预期工作,使xxxAPIDataSource(翻新)返回Flowable – webo80