0
我使用retrofit,rxjava和realm构建应用程序。这就是我要完成的:Android - 来自多个来源的数据
- 加载数据从本地数据库,并在同一时间发出网络请求
- 第一次显示一个载入只有
- 如果数据已经存在于数据库显示它与在某处显示小型装载程序
- 当网络结果准备就绪时,更新列表并将结果保存到磁盘
- 如果网络结果失败,则显示一条消息,指出数据可能已过时。
我知道如何使用领域,适当改造,但它的rxjava部分是令人困惑。有没有一种简单的方法来与rxjava做到这一点?
这是当前的代码库的样子:
CategoryRepository.java
public Observable<List<Category>> getCategories() {
return getCategoriesFromNetwork()
.observeOn(Schedulers.computation())
.doOnNext(this::saveCategoriesToDisk)
.publish(nwResponse -> Observable.merge(nwResponse, getCategoriesFromDisk().takeUntil(nwResponse)));
}
private Observable<List<Category>> getCategoriesFromNetwork() {
return service.getCategories()
.map(categoryListResponse -> categoryListResponse.getData());
}
private Observable<List<Category>> getCategoriesFromDisk() {
return Observable.just(realm.copyFromRealm(
realm.where(Category.class).findAll()
));
}
视图模型
categoryRepository.getCategories()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(categories -> {
//Do UI stuff
}, throwable -> {
});
我怎么知道,网络仍在加载?我想在从磁盘加载列表后显示加载程序。 – Prasanth