2017-08-15 84 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");