Android 在RealmMigration中创建对象并将其添加到RealmList
在我当前的应用程序中,我有一个Android 在RealmMigration中创建对象并将其添加到RealmList,android,realm,realm-migration,Android,Realm,Realm Migration,在我当前的应用程序中,我有一个HolderObject(它扩展了RealmObject)和一个long“machineId”。在新版本的应用程序中,这个HolderObject将能够以RealmList的形式包含更多的机器。请参见下面的课程: 旧对象: public class HolderObject extends RealmObject{ private long machineId; //.. getters and setters } 新对象: public clas
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
}
要将所有旧的HolderObject
s迁移到新对象,我使用我的自定义RealmMigration。详情如下:
public class RealmLong extends RealmObject {
private long val;
//.. getters and setters
}
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
- (附加问题)这是解决这个迁移问题的正确和最好的方法吗
- 这样做:
schema.get("HolderObject")
.addRealmListField("machineIds", schema.get("RealmLong"))
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
DynamicRealmObject realmLong = realm.createObject("RealmLong");
realmLong.setLong("val", obj.getLong("machineId"));
obj.getList("machineIds").add(realmLong);
}
})
.removeField("machineId");
您创建的realmLong对象必须是DynamicRealmObject。也不要忘记在转换后删除旧字段 请注意,迁移已经包装在事务中,您不需要实例化领域对象并自己执行事务 (附加问题)这是解决这个迁移问题的正确和最好的方法吗 想法是好的,执行不是。见上文 有关迁移的更多信息,请参阅github上的示例,当然还有文档