将 double 类型的领域字段迁移到具有值的新子对象
Migrate realm field of type double to new sub-object with values
我现在有一个用户对象,里面有一堆值,保存为 doubles
。我们的 api json 的格式现在正在更改为每个字段包含两个值。所以我创建了一个 Value
对象(它扩展了 RealmObject
)并且它包含两个值。
所以现在我想在我的用户对象中执行以下操作
//Current way
private Double balance;
//Want to migrate to this
private Value balance;
Value
对象如下所示:
private class Value extends RealmObject {
private Integer value;
private String formattedValue;
//getters/setters
}
我的问题是,如何在 RealmMigration
中表达这种变化?
这是我目前基于此得出的结论:()
schema.get("User")
.addField("balance_tmp", Value.class)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
//what goes here? how can I access the Value.class and call setValue()?
}
})
.removeField("balance")
.renameField("balance_tmp", "balance");
这可能吗?还是我应该接受分配给我更改的字段的任何数据都将丢失的事实?
像这样的东西应该可以工作:
RealmObjectSchema valueSchema = schema.create("Value")
.addField("value", Integer.class)
.addField("formattedValue", String.class);
schema.get("User")
.addRealmObjectField("balance_tmp", valueSchema)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
int balance = obj.getInt("balance");
DynamicRealmObject valueObj = obj.getObject("balance_tmp");
valueObj.setInt("value", balance);
valueObj.setString("formattedValue", format(balance));
}
})
.removeField("balance")
.renameField("balance_tmp", "balance");
我现在有一个用户对象,里面有一堆值,保存为 doubles
。我们的 api json 的格式现在正在更改为每个字段包含两个值。所以我创建了一个 Value
对象(它扩展了 RealmObject
)并且它包含两个值。
所以现在我想在我的用户对象中执行以下操作
//Current way
private Double balance;
//Want to migrate to this
private Value balance;
Value
对象如下所示:
private class Value extends RealmObject {
private Integer value;
private String formattedValue;
//getters/setters
}
我的问题是,如何在 RealmMigration
中表达这种变化?
这是我目前基于此得出的结论:(
schema.get("User")
.addField("balance_tmp", Value.class)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
//what goes here? how can I access the Value.class and call setValue()?
}
})
.removeField("balance")
.renameField("balance_tmp", "balance");
这可能吗?还是我应该接受分配给我更改的字段的任何数据都将丢失的事实?
像这样的东西应该可以工作:
RealmObjectSchema valueSchema = schema.create("Value")
.addField("value", Integer.class)
.addField("formattedValue", String.class);
schema.get("User")
.addRealmObjectField("balance_tmp", valueSchema)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
int balance = obj.getInt("balance");
DynamicRealmObject valueObj = obj.getObject("balance_tmp");
valueObj.setInt("value", balance);
valueObj.setString("formattedValue", format(balance));
}
})
.removeField("balance")
.renameField("balance_tmp", "balance");