簡體   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