我实现了一个使用rx-java从realm数据库获取数据集的Recycler视图。当我从数据集中删除项目然后调用获取所有项目时,我会收到剩余的项目以及我刚刚删除但无效的项目。
Observable.defer(list -> {
boolean isDeleted = true;
for (int i = 0; i < list.size(); i++)
isDeleted = isDeleted && evictById(list.get(i));
return Observable.just(isDeleted);
}).subscribe(new Subscriber{
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
@Override
public void onNext(Boolean success) {
if (success)
getUserList();
}
});
boolean evictById(final int itemId){
mRealm = Realm.getDefaultInstance();
RealmModel toDelete = mRealm.where(UserRealmModel.class).equalTo("userId", itemId).findFirst();
if (toDelete != null) {
mRealm.beginTransaction();
RealmObject.deleteFromRealm(toDelete);
mRealm.commitTransaction();
return !RealmObject.isValid(toDelete);
} else return false;
}
public void getUserList(){
Observable.from(Realm.getDefaultInstance().where(UserRealmModel.class).findAll())
.subscribe(new Subscriber<List<UserRealmModel>> {
@Override
public void onCompleted() {
hideViewLoading();
}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(List<UserViewModel> users) {
showUsersCollectionInView(users);
});
}
例如,数据集有10个项目,我删除了3个项目。在getUserList响应中,我收到10个项目的列表,其中包含7个有效项目和3个无效项目。 此外,我确保使用领域浏览器删除项目! 有人可以解释为什么会发生这种情况吗?
答案 0 :(得分:0)
听起来你是间接删除属于查询结果的项目,并且它是正确的,它是0.89的突破性变化的一部分。相反,您应该直接从查询结果中删除它们。
public boolean evictById(UserRealmModel obj) {
obj.deleteFromRealm()
return true;
}
// should be
public boolean evictById(RealmResults list, int index) {
list.deleteFromRealm(index);
return true;
}
您没有提供evictById
的实施方式,因此我猜测您的方法也做得更多,但希望您明白这一点。
在删除某些对象之后运行的任何查询都不应该包含已删除的对象。