问题是我之前以这种方式删除并更新了Realm中的记录:
public <T extends RealmObject> void deleteDataById(String publicId, Class<T> clazz){
Realm realm = Realm.getDefaultInstance();
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
RealmResults<T> result = realm.where(clazz).equalTo("publicId", publicId).findAll();
result.deleteAllFromRealm();
}
});
}
public <T extends RealmObject> void updateData(T object) {
try (Realm realmInstance = Realm.getDefaultInstance()) {
realmInstance.executeTransaction(realm -> {
Log.d(LOG_TAG, "updateData");
realm.insertOrUpdate(object);
});
}
}
但是,由于我正在学习RXJava
,我决定重新制作CRUD
下的RXJava
作业。
以下是我写入数据库的方式:
public <T extends RealmObject> Flowable<RealmResults<T>> getAllData(Class<T> clazz) {
Realm realm = Realm.getDefaultInstance();
RealmQuery<T> query = realm.where(clazz);
if(realm.isAutoRefresh()) {
Log.d(LOG_TAG, "getData isAutoRefresh()");
return query.findAllAsync().asFlowable().filter(RealmResults::isLoaded);
} else {
Log.d(LOG_TAG, "getData, !isAutoRefresh()");
return Flowable.just(query.findAll());
}
}
一方面,我正在考虑离开Update
和Delete
操作,因为它们没有返回任何内容,但另一方面,我认为它们至少应该返回结果操作。也许我没有正确地介绍。
我尝试使用Flowable.defer()
,Flowable.just()
,但flatMap()
仍有错误:
Flowable中的flatMap(io.reactivex.functions.Function&gt;)不能 适用于(匿名 io.reactivex.functions.Function)
这就是我试图制作的:
public Flowable deleteDataById(String publicId) {
Realm realm = Realm.getDefaultInstance();
return realm.asFlowable()
.flatMap(new Function<Realm, Boolean>() {
@Override
public Boolean apply(Realm realm) throws Exception {
return realm.where(ServiceModel.class)
.equalTo("publicId", publicId)
.findAll()
.deleteAllFromRealm();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
问题:
Update
和Delete
?Update
下的Delete
和RX
?