我正在遇到一个问题,我删除了一个RealmObject(并使用StethoRealm确认它已消失),但是当我创建并保存具有相同变量值的新RealmObject时,删除的RealmObject会与我的新RealmObject一起重新出现。
使用下面的对象 - 我通过匹配'id'来删除myObject1,但是当我创建一个具有相同'name'的新MyObject myObject2时,两个对象都出现在我的领域中
有关为何可能发生这种情况的任何提示?
示例:
public class MyObject extends RealmObject {
@PrimaryKey
private String id;
private String name;
// getters and setters
}
删除电话
@Override
public void deleteMyObjectById(final String id, final OnDeleteMyObjectById callback) {
Realm realm = new MyRealmConfiguration().getDefaultRealm();
final RealmResults<MyObject> myObjects = realm.where(MyObject.class).equalTo(RealmTable.MyObject.ID, id).findAll();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
myObjects.deleteAllFromRealm();
if (callback != null) {
callback.onSuccess();
}
}
});
realm.close();
}
添加电话
@Override
public void addMyObject(MyObject myObject, OnSaveMyObjectCallback callback) {
Realm realm = new MyRealmConfiguration().getDefaultRealm();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(myObject);
if (callback != null) {
callback.onSuccess();
}
}
});
realm.close();
}
答案 0 :(得分:1)
我不确定你是如何删除你的对象的。我删除它们(并且有效)的方式是......
final RealmResults<UserCredentials> credentialResults = realm.where(UserCredentials.class).findAll();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
credentialResults.deleteAllFromRealm();
}
});
realm.close();
当然,您使用的是MyObject而不是UserCredentials,并且您不能删除该类型的所有内容,但它应该足够相似。如果您还没有尝试使用 executeTransaction 和 realm.close()。
答案 1 :(得分:1)
尝试这样的事情。获取transcation方法中的实例并删除。我一直在用我的应用程序之一。并且它与删除过程一起正常工作
Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
RealmResults<MyObject> myObjects = realm.where(MyObject.class).equalTo(RealmTable.MyObject.ID, id).findAll();
myObjects.deleteAllFromRealm();
}
});