8

Realm v0.80.1 を使用しており、追加した新しいプロパティの移行コードを記述しようとしています。プロパティは RealmList です。新しい列を適切に追加する方法や値を設定する方法がわかりません。

私が持っているもの: customRealmTable.addColumn(, "list");

列が適切に追加されたら、リスト プロパティの初期値を設定するにはどうすればよいですか? 私は次のようなことをしたいと思います:

customRealmTable.setRealmList(newColumnIndex, rowIndex, new RealmList<>());

4

2 に答える 2

15

Realm v1.0.0 の時点 (およびおそらくそれ以前) では、RealmObjectSchema#addRealmListField(String, RealmObjectSchema)( javadoc へのリンク) を呼び出すだけでこれを実現できます。たとえば、permissionsタイプのフィールドをRealmList<Permission>クラスUserに追加しようとしている場合は、次のように記述します。

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.
 */
于 2016-10-05T21:11:04.843 に答える
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++;
        }
于 2015-05-29T06:48:26.617 に答える