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