Android 领域迁移:添加新的领域列表列
Android Realm Migration: Adding new Realm list column
我正在使用 Realm v0.80.1,我正在尝试为我添加的新 属性 编写迁移代码。 属性 是一个 RealmList。我不确定如何正确添加新列或设置一个值。
我有:
customRealmTable.addColumn(, "list");
正确添加该列后,我将如何为列表设置初始值 属性?我想做类似的事情:
customRealmTable.setRealmList(newColumnIndex, rowIndex, new RealmList<>());
您可以在此处的示例中查看添加 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++;
}
从 Realm v1.0.0(可能更早)开始,您可以简单地调用 RealmObjectSchema#addRealmListField(String, RealmObjectSchema)
(link to javadoc) 来实现这一点。例如,如果您尝试将类型为 RealmList<Permission>
的 permissions
字段添加到您的 User
class,您将编写:
if (!schema.get("User").hasField("permissions")) {
schema.get("User").addRealmListField("permissions", schema.get("Permission"));
}
Realm 的迁移文档中也有一个例子here。为方便起见,这里是 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.
*/
我正在使用 Realm v0.80.1,我正在尝试为我添加的新 属性 编写迁移代码。 属性 是一个 RealmList。我不确定如何正确添加新列或设置一个值。
我有: customRealmTable.addColumn(, "list");
正确添加该列后,我将如何为列表设置初始值 属性?我想做类似的事情:
customRealmTable.setRealmList(newColumnIndex, rowIndex, new RealmList<>());
您可以在此处的示例中查看添加 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++;
}
从 Realm v1.0.0(可能更早)开始,您可以简单地调用 RealmObjectSchema#addRealmListField(String, RealmObjectSchema)
(link to javadoc) 来实现这一点。例如,如果您尝试将类型为 RealmList<Permission>
的 permissions
字段添加到您的 User
class,您将编写:
if (!schema.get("User").hasField("permissions")) {
schema.get("User").addRealmListField("permissions", schema.get("Permission"));
}
Realm 的迁移文档中也有一个例子here。为方便起见,这里是 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.
*/