[英]Realm Update failed - Android
我正在為Android應用程序使用領域,因此我想使用相同的主鍵更新Bill對象,但是以
致命異常:主進程:com.example.rikirikmen.billsplit,PID:22045 io.realm.exceptions.RealmPrimaryKeyConstraintException:值已存在:1
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Bill updateBill = realm.where(Bill.class).equalTo("Bill_ID", bill).findFirst();
DetailMenu menu = realm.createObject(DetailMenu.class);
menu.setMenuID(MenuID);
menu.setMenuName(String.valueOf(menuName.getText()));
menu.setMenuPrice(Price);
menu.setQuantity(Qty);
for (int i = 0; i < adapter.getPersonMenuObjList().size(); i++) {
PersonInMenu pim = realm.createObject(PersonInMenu.class);
pim.setPersonID(adapter.getPersonMenuObjList().get(i).getPersonID());
pim.setStatus(adapter.getPersonMenuObjList().get(i).isStatus());
menu.personInMenus.add(pim);
}
updateBill.detailmenu.add(menu);
realm.copyToRealmOrUpdate(updateBill);
}
});
這樣做 :
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Bill updateBill = realm.where(Bill.class).equalTo("Bill_ID", bill).findFirst();
DetailMenu menu = new DetailMenu();
RealmList<PersonInMenu> personInMenus = new RealmList<>(); //added line
menu.personInMenus = personInMenus; //added line
menu.setMenuID(MenuID);
menu.setMenuName(String.valueOf(menuName.getText()));
menu.setMenuPrice(Price);
menu.setQuantity(Qty);
for (int i = 0; i < adapter.getPersonMenuObjList().size(); i++) {
PersonInMenu pim = new PersonInMenu();
pim.setPersonID(adapter.getPersonMenuObjList().get(i).getPersonID());
pim.setStatus(adapter.getPersonMenuObjList().get(i).isStatus());
menu.personInMenus.add(pim);
}
updateBill.detailmenu.add(menu);
realm.copyToRealmOrUpdate(updateBill);
}
});
盡管如果您不願意通過copyToRealmOrUpdate()
將分離的對象保存到Realm中,請對createObject()
使用適當的替代,該替代實際上將主鍵作為其第二個參數 。
如果使用createObject(clazz, primaryKey)
則在這種情況下將不需要copyToRealmOrUpdate()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.