Android领域 - 删除后返回RealmObject

时间:2017-07-19 02:47:00

标签: android realm

我正在遇到一个问题,我删除了一个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();
}

2 个答案:

答案 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();
            }
        });