在我的当前应用程序中,我有一个HolderObject
(它扩展了RealmObject
),其中包含一个long
的'machineId'。在应用程序的新版本中,这个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
添加到这个列表中? - (附加问题) 这是否是解决此迁移问题的正确和最佳方法?