使用Realm
toinsert
和read/query
data时,我一直有非常不正常的行为。这是准确的事情:
初始状态
当我开始向数据库中插入数据时,一切正常。我有以下代码要处理,autoIncrementingId
因为我还没有找到Realm
提供该功能的版本!
CashOrder cashOrder = new CashOrder();
realm.beginTransaction();
int lastCashOrderId;
RealmResults<CashOrder> cashOrders = realm.where(CashOrder.class).findAll();
cashOrders.sort("id", Sort.ASCENDING);
if (cashOrders.isEmpty()){
cashOrder.setId("0");
}else{
lastCashOrderId = Integer.parseInt(cashOrders.last().getId());
cashOrder.setId(String.valueOf(lastCashOrderId + 1));
}
//the rest of the code here
//then copyToRealm here;
realm.copyToRealm(cashOrder);
realm.commitTransaction();
问题
将数据插入到database
工作中就可以了,但是id值到达的那一刻10
-从id开始,意味着表中有11个项目(0)
,我得到了一个Realm Primary Key Exception
基本上抱怨我试图添加一个已经存在的对象的表。
我明确地打电话realm.copyToRealm(obj)
而不是realm.copyToRealmOrUpdate(obj)
因为那是我想要做的。仅当执行Edit时才允许更新。
我被困在这里,似乎无法弄清楚是什么原因导致了此问题!
更多信息
我在用:
compile 'io.realm:realm-android:0.87.4'
非常感谢您的帮助!提前致谢!
这是因为你的ID是一个STRING
,因此它是作为有序1
,10
,2
,3
,... 9
。
这意味着当您已经插入时评估“下一个ID”时"10"
,
lastCashOrderId = Integer.parseInt(cashOrders.last().getId());
lastCashOrderId
将为9,您将10
再次插入。
解决方案:long
长时间使用ID,或重新考虑您的自动递增ID(例如使用之类的UUID.randomString()
东西)
更新到较新的Realm版本时,应该使用PSfindAllSorted()
而不是findAll().sort()
保持一致的行为。
编辑:请用于long newId = realm.where(CashOrder.class).max("age").longValue() + 1;
评估新ID,并在进行交易时执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句