gpt4 book ai didi

android - 在 RealmMigration 中创建对象并将其添加到 RealmList

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:07 34 4
gpt4 key购买 nike

在我当前的应用程序中,我有一个 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 添加到此列表?
  • (奖励问题)这是解决此迁移问题的正确和最佳方法吗?

最佳答案

这样做:

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。
也不要忘记在转换后删除旧字段。

请注意,迁移已包含在事务中,您无需实例化 Realm 对象并自行执行事务。

(Bonus question) Is this the correct and best approach to this migration problem?

想法好,执行不好。见上文。

有关迁移的更多信息,请参阅 this github 上的示例,当然还有文档。

关于android - 在 RealmMigration 中创建对象并将其添加到 RealmList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37656574/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com