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