現在のアプリでは、 「machineId」を持つHolderObject
(を拡張RealmObject
する) があります。long
アプリの新しいバージョンではHolderObject
、RealmList の形式でより多くのマシンを含めることができます。以下のクラスを参照してください。
古いオブジェクト:
public class HolderObject extends RealmObject{
private long machineId;
//.. getters and setters
}
新しいオブジェクト:
public class HolderObject extends RealmObject{
private RealmList<RealmLong> machineIds;
//.. getters and setters
}
その中RealmLong
は次のとおりです。
public class RealmLong extends RealmObject {
private long val;
//.. getters and setters
}
すべての古いHolderObject
を新しいオブジェクトに移行するには、カスタム RealmMigration を使用します。これは次のとおりです。
public class CustomRealmMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
schema.get("HolderObject")
.addRealmListField("machineIds", schema.get("RealmLong"))
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
RealmLong realmLong = realm.createObject(RealmLong.class);
realmLong.setVal(obj.getLong("machineId"));
obj.getList("machineIds").add(realmLong);
realm.commitTransaction();
realm.close();
}
});
}
}
質問:
- の行
obj.getList("machineIds").add(realmLong);
で、この関数はDynamicRealmObject
ではなく を期待しているというエラーが表示されますRealmLong
。RealmLong
このリストに を追加するにはどうすればよいですか? - (おまけの質問)これは、この移行の問題に対する正しい最善のアプローチですか?