0
任何人都可以提供一個使用Retrofit和RxJava將數據保存到Realm數據庫的好例子嗎?謝謝。用Retrofit和RxJava使用Realm來存儲數據
任何人都可以提供一個使用Retrofit和RxJava將數據保存到Realm數據庫的好例子嗎?謝謝。用Retrofit和RxJava使用Realm來存儲數據
創建訂閱,它通過改造服務下載數據並持續到您堅持的對象變成這樣
try(Realm r = Realm.getDefaultInstance()) { // on background thread
r.executeTransaction((realm) -> {
Cat defaultCat = new Cat();
long rank;
if(realm.where(Cat.class).count() > 0) {
rank = realm.where(Cat.class).max(CatFields.RANK).longValue();
} else {
rank = 0;
}
for(CatBO catBO : catsBO.getCats()) {
defaultCat.setId(catBO.getId());
defaultCat.setRank(++rank);
defaultCat.setSourceUrl(catBO.getSourceUrl());
defaultCat.setUrl(catBO.getUrl());
realm.insertOrUpdate(defaultCat);
}
});
}
王國的境界
Subscription downloadCats = Observable.create(new RecyclerViewScrollBottomOnSubscribe(recyclerView))
.filter(isScroll -> isScroll || realm.where(Cat.class).count() <= 0)
.switchMap(isScroll -> catService.getCats().subscribeOn(Schedulers.io())) //
.retry()
.subscribe(catsBO -> {
catPersister.persist(catsBO);
}, throwable -> {
Log.e(TAG, "An error occurred", throwable);
});
compositeSubscription.add(downloadCats);
和顯示數據,並隨時向日期在您的UI線程與
RealmRecyclerViewAdapter
realm.where(Cat.class).findAllSortedAsync(...).asObservable().filter(RealmResults::isLoaded).subscribe()
另一個訂閱:recyclerView.setAdapter(new CatAdapter(getContext(),
realm.where(Cat.class).findAllSortedAsync(CatFields.RANK, Sort.ASCENDING)));
return RxTextView.textChanges(editText).switchMap(charSequence ->
realm.where(Dog.class)
.contains(DogFields.NAME, charSequence.toString())
.findAllAsync()
.asObservable()
).filter(RealmResults::isLoaded)
.subscribe(dogs -> {
adapter.updateData(dogs);
});
我使用的MVP模塊 –
嗯,這是規範的境界+ RxJava使用。把它翻譯成你的Presenter並用'share()'暴露'RxTextView.textChanges()'作爲一個可觀察對象,並且將自己綁定到Presenter中,完全取決於你。我不打算添加「乾淨的代碼」解決方案,因爲[它涉及從零複製數據庫複製](http://stackoverflow.com/a/38983203/2413303),這對我來說沒有意義 – EpicPandaForce