Android Realm 迁移:添加新的 Realm 列表列

8
我正在使用Realm v0.80.1,尝试为我添加的新属性编写迁移代码。该属性是一个RealmList。我不确定如何正确地添加新列或设置值。
我的做法是: customRealmTable.addColumn(, "list");
一旦列被正确添加,我该如何为列表属性设置初始值?我想要做的类似于:
customRealmTable.setRealmList(newColumnIndex, rowIndex, new RealmList<>());
2个回答

16

从 Realm v1.0.0 开始(或许之前就可以),你可以简单地调用 RealmObjectSchema#addRealmListField(String, RealmObjectSchema)链接到 javadoc)来实现这一点。例如,如果您正在尝试将类型为 RealmList<Permission>permissions 字段添加到您的 User 类中,您应该编写:

if (!schema.get("User").hasField("permissions")) {
    schema.get("User").addRealmListField("permissions", schema.get("Permission"));
}

在 Realm 迁移文档中也有一个示例 这里。此外,为了方便起见,这里是关于 addRealmListField 的完整 javadoc:

/**
 * Adds a new field that references a {@link RealmList}.
 *
 * @param fieldName  name of the field to add.
 * @param objectSchema schema for the Realm type being referenced.
 * @return the updated schema.
 * @throws IllegalArgumentException if the field name is illegal or a field with that name already exists.
 */

权限和Permission究竟有什么区别? - undefined

7
您可以在此示例中查看如何添加RealmList属性:https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/model/Migration.java#L78-L78
相关代码如下:
   if (version == 1) {
            Table personTable = realm.getTable(Person.class);
            Table petTable = realm.getTable(Pet.class);
            petTable.addColumn(ColumnType.STRING, "name");
            petTable.addColumn(ColumnType.STRING, "type");
            long petsIndex = personTable.addColumnLink(ColumnType.LINK_LIST, "pets", petTable);
            long fullNameIndex = getIndexForProperty(personTable, "fullName");

            for (int i = 0; i < personTable.size(); i++) {
                if (personTable.getString(fullNameIndex, i).equals("JP McDonald")) {
                    personTable.getRow(i).getLinkList(petsIndex).add(petTable.add("Jimbo", "dog"));
                }
            }
            version++;
        }

1
这个答案已经过时了,请看下面我的答案,了解如何使用最新的Realm版本来完成此操作。 - Vicky Chijwani
如何在RealmMigration中检查另一个字段的值并基于此转换新添加的字段。假设我有一个名为“a”的整数字段,我想添加一个名为“b”的整数字段。在Realm Migration中,我必须检查,如果a == -1,则b == 0,否则如果a == 0,则b == 1,以此类推。 - Aman Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接