2017-12-23 6 views
0

私はレルムDBに格納されているオブジェクトに新しいフィールド(lastUpdate)を追加しました:レルムに新しいフィールドを追加した後のデフォルト値の設定方法は?

public class ChartObject extends RealmObject { 
    ... 
    private Long lastUpdate = 0L; 

    public ChartObject() { 
     ... 
     lastUpdate = 0L; 
    } 

    ... 
    public long getLastUpdate() { return lastUpdate; } 
    public void setLastUpdate(long lastUpdate) { this.lastUpdate = lastUpdate; 
} 

私はMyMigration.javaにそれを追加しました:

@Override 
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 
    RealmSchema schema = realm.getSchema(); 

    if (oldVersion < 4) { 
     schema.get("ChartObject") 
       .addField("lastUpdate", Long.class); // how to set default value? 
     oldVersion++; 
    } 
} 

今、私はそれにアクセスしようとしているとき上 ')長い java.lang.Long.longValue(' 仮想メソッドを呼び出すための試み:getLastUpdate()を経由して私は

のjava.lang.NullPointerExceptionを取得しますnullオブジェクトリファレンス

どのようにしてデフォルト値を正しく設定できますか?

答えて

1

既存のオブジェクトがある場合は、そのオブジェクトをトランスフォームで更新する必要があります。

if (oldVersion < 4) { 
    schema.get("ChartObject") 
      .addField("lastUpdate", Long.class); 
    schema.get("ChartObject").transform(new RealmObjectSchema.Function() { 
     @Override 
     public void apply(DynamicRealmObject obj) { 
      obj.setLong("lastUpdate", 0L); 
     } 
    }); 
    oldVersion++; 
} 
関連する問題