【问题标题】:Migrate realm field of type double to new sub-object with values将 double 类型的领域字段迁移到具有值的新子对象
【发布时间】:2017-08-15 15:44:22
【问题描述】:

我现在有一个用户对象,其中包含一堆值,保存为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 中表达这种变化?

这是我目前基于此的:(Change datatype of Realm field - Java)

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");

这甚至可能吗?还是我应该接受分配给我更改的字段的任何数据都会丢失的事实?

【问题讨论】:

  • 有可能,但最好选择创建 2 个字段而不是链接对象字段。

标签: android realm realm-migration


【解决方案1】:

这样的事情应该可以工作:

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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多