【问题标题】:How to set default value after adding a new field to Realm?向Realm添加新字段后如何设置默认值?
【发布时间】:2018-06-05 15:43:47
【问题描述】:

我已向存储在 Realm 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++;
    }
}

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

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

如何正确设置默认值?

【问题讨论】:

    标签: android realm database-migration


    【解决方案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++;
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 2016-01-30
    • 2017-08-31
    • 1970-01-01
    • 2019-03-23
    • 2022-01-21
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多