2017-08-15 88 views
0

我现在有一个用户对象,其中有一堆值,保存为doubles。我们的api json的格式现在正在改变为包含每个字段的两个值。所以我创建了一个Value对象(它扩展了RealmObject)并包含这两个值。将域类型double的域名字段迁移到具有值的新子对象

所以现在我的用户对象我想要做以下

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

这甚至可能吗?或者我应该辞职,因为分配给我更改的字段的任何数据都将丢失?

+0

这是可能的,但它是更好的选择,创建2个区域,而不是一个链接对象字段。 – EpicPandaForce

回答

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