2017-07-19 81 views
0

我遇到了一个问题,我删除了RealmObject(并确认它使用StethoRealm),但是当我创建并保存具有相同变量值的新RealmObject时,删除的RealmObject与我的新RealmObject一起再现。Android领域 - RealmObject删除后返回

随着下方的对象 - 我通过匹配“身份证”删除myObject1,但是当我创建一个新的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

我不知道你用真正的删除和创建新的对象的方式,但你应该使用一个领域实例删除,然后得到境界的新实例创建,如果使用一个现有的领域实例创建,它仍旧引用旧的DB然后删除对象仍然出现 –

+0

上述代码不足以调查此问题。你可以添加一些代码,包括删除和创建对象吗? – Dalinaum

+0

'我删除了一个RealmObject(并且使用StethoRealm确认它不见了),但是当我使用相同的变量值创建并保存一个新的RealmObject时,被删除的RealmObject会与我的新RealmObject一起再次出现。“所有这些代码都应该包含在这个问题! – EpicPandaForce

回答

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,和你没有删除该类型的一切,但它应该是相似的足够。尝试使用executeTransactionrealm.close()如果您还不是。

+0

正如我在做的,除了我得到我的领域实例之前,我得到我的RealmResults 'Realm realm = new MyRealmConfiguration()。getDefaultRealm();' – Naz

+0

等,所以你使用自己的配置,但得到默认Realm实例?如果您使用自定义Realm配置,则必须以不同方式实例化Realm – darkterbears

+0

My MyRealmConfiguration重写getDefaultRealm以返回我的自定义配置 – Naz

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