2016-02-15 66 views
2

嘿,我们试图只在记录是新的时更新我的​​表(我的存储表中没有通过检查记录的objectId存在)我的objectId是主键, 我尝试添加条件realm.where(NotesRealmClass.class).notEqualTo("objectId", Id); 但它没有似乎工作我怎样才能添加一条记录仅记录是新的,或者我们可以说 - 停止更新先前存储的记录只有在记录是新的时才更新Realm表(012)

public void storeNotes(String Id, String Title ,String Location) { 

    realm.beginTransaction(); 
    NotesRealmClass Notes = new NotesRealmClass(); 
    Notes.setobjectId(Id); 
    Notes.setLocation(Location); 
    Notes.setTitle(Title); 
    realm.where(NotesRealmClass.class).notEqualTo("objectId", Id); // i tired to check if we already have the object with object Id 
    realm.copyToRealmOrUpdate(Notes); 
    Toast.makeText(context, "Notes Stored", Toast.LENGTH_SHORT).show(); 
    realm.commitTransaction(); 

} 

回答

2

有2个选项。

您可以使用方法copyToRealm()try...catch。 Realm不允许使用相同的主键创建对象并抛出异常。

public void storeNotes(String Id, String Title ,String Location) { 
    try { 
     realm.beginTransaction(); 
     NotesRealmClass Notes = new NotesRealmClass(); 
     Notes.setobjectId(Id); 
     Notes.setLocation(Location); 
     Notes.setTitle(Title); 
     realm.copyToRealm(Notes); // <====== 
     Toast.makeText(context, "Notes Stored", Toast.LENGTH_SHORT).show(); 
     realm.commitTransaction(); 
    } catch (Exception error) { 
     realm.cancelTransaction(); 
    } 
} 

做同样没有try...catch,更接近你的方法,你应该做一个修复代码中的

public void storeNotes(String Id, String Title ,String Location) { 

    realm.beginTransaction(); 
    NotesRealmClass Notes = new NotesRealmClass(); 
    Notes.setobjectId(Id); 
    Notes.setLocation(Location); 
    Notes.setTitle(Title); 
    if (realm.where(NotesRealmClass.class).equalTo("objectId", Id).count() == 0) { 
     // there are no object with this `Id` 
     realm.copyToRealmOrUpdate(Notes); 
    } 
    Toast.makeText(context, "Notes Stored", Toast.LENGTH_SHORT).show(); 
    realm.commitTransaction(); 

} 
+0

那么这是一个更完整的答案!肯定会_不推荐'try ... catch'方法;例外情况很慢,并且如果您试图插入数千个可能最终成本很高的对象。第二种方法是要走的路 - 我们没有['objectForPrimaryKey'](https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm19objectForPrimaryKeyuRdq_CS_6Object_FS0_FTMq_3keyPSs9AnyObject__GSqq__)方法他们进入Swift。 –

+0

是的,你是对的! –

+0

嘿非常感谢它的工作 –

2

检查是否数与该ID的对象等于0 - 如果是这样,则插入您的新对象:

if (realm.where(NotesRealmClass.class).equalTo("objectId", Id).count() == 0) { 
    realm.copyToRealm(Notes); 
} 
+0

嘿感谢了很多人,这正是我需要的 –

+0

插入比快copyToRealm。所以请使用插入而不是使用copyToRealm –

相关问题