繁体   English   中英

领域查询返回Android中不完整的结果集

[英]Realm Query Returns Incomplete Results Set In Android

使用Realm insertread/query数据时,我一直有非常不正常的行为。 这是准确的事情:

初始状态

当我开始将数据插入数据库时​​,一切正常。 我有以下代码来处理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(0)因为ID从(0)开始,意味着表中有11个项目(0) ,我收到了Realm Primary Key Exception ,该Realm Primary Key Exception基本上是在抱怨我试图添加一个已经存在的对象。

我明确地调用realm.copyToRealm(obj)而不是realm.copyToRealmOrUpdate(obj)因为这是我想要做的。 仅在执行Edit时才允许更新。

我被困在这里,似乎无法找出导致此问题的原因!

更多信息

我在用:

compile 'io.realm:realm-android:0.87.4'

非常感谢您的帮助! 提前致谢!

这是因为你的ID是一个STRING ,因此它的排序为11023 ,... 9

这意味着当您已经插入"10"时评估“下一个ID”时,

lastCashOrderId = Integer.parseInt(cashOrders.last().getId()); 

lastCashOrderId将为9,并且您将再次插入10

解决方案:将long id用作long,或者重新考虑您的自动增量ID(例如,使用UUID.randomString()或其他名称)

PS,当您更新到较新的Realm版本时,应使用findAllSorted()而不是findAll().sort()以获得一致的行为。

编辑:请使用long newId = realm.where(CashOrder.class).max("age").longValue() + 1; 评估新ID,并在进行交易时执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM