0
私はretrofit、rxjava、realmを使ってアプリケーションを構築しています。これは私が達成しようとしているものです:Android - 複数のソースからのデータ
- ロードデータを発行ネットワーク要求ローカルDBから、同時に
- 初回のみ
- をローダーを表示するデータがDBディスプレイにすでに存在する場合はそれとどこかで小さなローダーを表示する
- ネットワーク結果が準備完了でリストを更新し、結果をディスクに保存する場合
- ネットワークの結果が失敗した場合は、データが古くなる可能性があるというメッセージを表示します。
私はrealmを正しく使用する方法を知っていますが、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()
));
}
のViewModel
categoryRepository.getCategories()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(categories -> {
//Do UI stuff
}, throwable -> {
});
どのようにネットワークがまだロードされていることを知っていますか:
は、この何かのリストですか?私はディスクからリストをロードした後にローダーを表示したいと思います。 – Prasanth