向Realm添加新字段后如何设置默认值?

Pri*_*alj 4 android database-migration realm

lastUpdate向存储在Realm DB中的对象添加了一个新字段():

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; 
}
Run Code Online (Sandbox Code Playgroud)

我已将其添加到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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我试图访问它通过getLastUpdate()我得到

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'long java.lang.Long.longValue()'

如何正确设置默认值?

Epi*_*rce 8

如果您已有对象,则需要在转换中更新它们。

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++;
}
Run Code Online (Sandbox Code Playgroud)