2016-10-10 47 views
1

我想寫入幾個對象到我的領域數據庫。寫入數據庫不保存關聯

由於它們與另一個對象(RealmUser)關聯,我通過getActivities().addAll(activities)將它們添加到它的RealmList<RealmActivity>

我試過這個,有沒有先通過copyToRealm(activities)將這個集合複製到這個領域,這就是問題所在。這似乎工作,只要我不重新啓動我的應用程序(或者,很奇怪,當我回到另一個活動)。只要我這樣做,這些活動仍然保留在數據庫中,但它們不再與用戶關聯。我嘗試了realm.copyToRealmOrUpdate(user);realm.insertOrUpdate(user);(正如您在代碼中看到的那樣),並且它不會持續比此活動更長的關聯。

我的猜測是,關聯保存在內存中但從未提交給實際文件(?),一旦我離開活動,我的數據庫的內存映像將被刪除,從而失去了關聯,而我的實際數據被保存到實際文件中。那麼,我需要做些什麼來堅持聯想?

try(Realm realm = Realm.getDefaultInstance()) 
{ 
    realm.executeTransaction(new Realm.Transaction() 
    { 
     @Override 
     public void execute(Realm realm) 
     { 
      RealmUser user = realm.where(RealmUser.class).equalTo("userId", userId).findFirst(); 
      List<RealmActivity> tmp = realm.copyToRealm(activities); 

      user.getActivities().addAll(tmp); 
      user.getVitalData().addAll(realm.copyToRealm(vitalData)); 
      user.getDailyActivities().addAll(realm.copyToRealm(dailies)); 

      realm.copyToRealmOrUpdate(user); 
      realm.insertOrUpdate(user); 
     } 
    }); 
} 
+2

您不需要堅持關聯。您顯示的代碼應將關聯保存到磁盤。 'userId'是主鍵嗎? 'copyToRealmOrUpdate()'和'insertOrUpdate'都應該在這裏工作。當應用程序啓動時,您是否曾經將用戶複製到數據庫並帶有空的「活動」?這將通過用戶對象中的空列表來覆蓋具有相同'userId'的用戶對象。 – beeender

+0

感謝千次以上的評論。我實際上確實爲用戶保留了一個空的活動列表,而這完全不是本意!再次感謝! – wickermoon

回答

1

正如beeender已經指出的那樣,我是我每次登錄的時間節省了用戶的實例有一個空的活動列表。這是問題。