2017-07-26 28 views
0

複製我有一個一對多的關係,在境界只有有效的管理對象可以從境界

public class BayEntity extends RealmObject implements RealmModel { 

    @PrimaryKey 
    private int  id; 
    private String title; 
} 

public class TermEntity extends RealmObject implements RealmModel { 

    @PrimaryKey 
    private String termId; 
    private String name; 

    private RealmList<BayEntity> bayList; 

public void updateBayList(ArrayList<BayEntity> bayList) { 

     if(CollectionUtility.isEmptyOrNull(this.bayList)) 
      this.bayList = new RealmList(); 
     this.bayList.addAll(bayList); 
     realm.beginTransaction(); 
     realm.copyToRealm(this.bayList); 
     realm.insertOrUpdate(this); //update current instance 
     realm.commitTransaction(); 
    } 

    public ArrayList<BayEntity> getSimpleList() { 
     if(CollectionUtility.isEmptyOrNull(bayList)) 
      return new ArrayList<>(); 
     return (ArrayList<BayEntity>) realm.copyFromRealm(bayList); 
    } 
} 

我得到含baylist所有TermEntity對象爲:

public RealmResults<TermEntity> getTerms() { 
     return realm.where(TermEntity.class).findAll(); 
    } 

我能保存併成功檢索bayList。當我嘗試將其轉換爲Arraylist的方法getSimpleList(),我得到異常:

java.lang.IllegalArgumentException異常:只有有效的管理對象可以是 從境界複製。

我不明白如何將對象從域中保存和檢索時可以不受管理。請糾正我。謝謝。

回答

2

在我看來,彷彿你有幾個問題:

  1. 你在哪裏得到您在updateBayList方法使用Realm實例?既然是例如本地狀態,它可能很容易地引用一個境界,是不是在目前的情況下(時間或線程)有效

  2. 前三行if ... addAll(bayList);修改Term小號RealmList。如果管理對象,則不能在事務外執行此操作。當對象是管理,你就會得到你所描述的錯誤,因爲你正試圖管理對象添加到非託管RealmList

  3. 雖然不是一個問題,RealmObject已經實現RealmModel。說一次,爲什麼再說一遍?

編輯補充:

爲了BayEntity s添加到一個TermEntity,首先要確保的是TermEntity管理對象(使用copyToRealm,或查詢它)。一旦你這樣做了,updateBayList中的代碼幾乎是正確的。你想要的東西是這樣的:

realm.beginTransaction(); 
    if (CollectionUtility.isEmptyOrNull(this.bayList)) { 
     this.bayList = new RealmList(); 
    } 
    this.bayList.addAll(bayList); 
    realm.commitTransaction(); 
+0

謝謝你指出我的代碼中的錯誤。你能請告訴我更新bayList的正確方法嗎?我想添加項目到已經存在的列表中。謝謝 – NightFury

+0

此外,realm是一個來自單例類的實例,單獨管理。爲了簡單起見,我在這裏提到了這個。 – NightFury

相關問題