Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确保存包含RealmList的对象?_Java_Android_Realm - Fatal编程技术网

Java 如何正确保存包含RealmList的对象?

Java 如何正确保存包含RealmList的对象?,java,android,realm,Java,Android,Realm,我有两个领域对象:单元和子单元。Unit对象具有子单元的领域列表。我使用单个单元对象。定期创建一个新的子单元对象并将其添加到单元的列表中,然后我在我的单元对象上调用copyToRealmOrUpdate。然而,每次我调用copyToRealmOrUpdate时,该单元包含的所有子单元都会被再次复制,即使它们已经存在于数据库中。这导致我的数据库规模迅速增长。 有没有办法在每次保存单元对象时只保存添加到列表中的最后一个子单元?谢谢 创建一个Unit对象并将其与copyToRealmOrUpdate一

我有两个领域对象:单元和子单元。Unit对象具有子单元的领域列表。我使用单个单元对象。定期创建一个新的子单元对象并将其添加到单元的列表中,然后我在我的单元对象上调用copyToRealmOrUpdate。然而,每次我调用copyToRealmOrUpdate时,该单元包含的所有子单元都会被再次复制,即使它们已经存在于数据库中。这导致我的数据库规模迅速增长。 有没有办法在每次保存单元对象时只保存添加到列表中的最后一个子单元?谢谢

创建一个Unit对象并将其与copyToRealmOrUpdate一起保存在数据库中。 当您创建新的子单元时,将其与数据库中的copyToRealmOrUpdate一起保存。 然后您可以调用已经保存在数据库中的Unit对象,并使用Unit.getSubunits.addSubunit将数据库中保存的子单元添加到数据库中保存的单元。
您不需要在数据库中多次保存单元。

请尝试以下代码来创建新的子单元实例:

realm.beginTransaction();

Unit unit = realm.where(Unit.class)
                 // write your condition for extracting of Unit object
                 .equalTo("id", unit_id).findFirst();

if(unit == null){
    Log.e(APP_TAG, "Unit " + unit_id + " not found");
    realm.cancelTransaction();
    return;
}

Subunit subunit = realm.createObject(Subunit.class);
// setup subunit fields

unit.getSubunits().add(subunit);

realm.commitTransaction();

不是每次需要通过特定的查询从领域获取单元对象时都创建单元对象,而是将子单元实例直接放入查询对象。

Thx,我设法使它工作起来。区别在于我使用的是全局单元对象,当我向其中添加子单元时,它们不会永久保存到realmlist,除非我在单元对象上调用copyOrUpdate。现在,当我使用Unit Unit=realm.whereUnit.class获取Unit对象时。。。。他们得到了很好的拯救。然而,我试图避免从领域查询对象,因为我一次只处理1个单元对象,并且子单元是重复添加的。方法copyToRealmOrUpdate-它也是对数据库的查询,但通过类似领域的查询通过主键获取对象。whereUnit.class。。。工作速度更快。您只需要存储单元实例的主键,而不需要存储对象。