有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RealmMigration删除了我所在领域的所有数据

今天我改变了我的应用领域模式,所以我实现了一个迁移。 在迁移过程中,我只需要添加一个字段,所以我做到了:

 if (oldVersion == 0) {
    RealmObjectSchema class = schema.get("Class");
    class.addField("addedField", boolean.class, null)
       .transform(new RealmObjectSchema.Function() {
           @Override
           public void apply(DynamicRealmObject obj) {
              obj.set("addedField", false);
           }
       });
       oldVersion++;
}

但这抹去了我王国里的一切,我没有更多的数据

这不是问题,因为我仍处于开发阶段。我进行了迁移,而不是卸载/重新安装应用程序,只是为了学习如何实现RealmMigration

我做错什么了吗?我把所有东西都抹掉是正常的吗?我需要添加更多代码吗? 我已经阅读了文档,并查看了示例应用程序。提供的代码没有更多内容

领域配置:

Realm.init(this);
RealmConfiguration newConfig = new RealmConfiguration.Builder()
   .name("myRealm.realm")
   .schemaVersion(1)
   .migration(new SchemaMigration())
   .build();

至少:

Realm realm = Realm.getInstance(newConfig);

编辑:

我通过移除name("myRealm.realm")解决了这个问题。在第一次安装时,我没有使用RealmConfiguration,所以领域的名称是:“default.realm”。谢谢你们的支持和回答


共 (1) 个答案

  1. # 1 楼答案

    尝试不将null作为字段属性传递,并使用特定于类型的setter(setBoolean)来转换DynamicRealmObject

    if (oldVersion == 0) {
        RealmObjectSchema class = schema.get("Class");
        class.addField("addedField", boolean.class)
             .transform(new RealmObjectSchema.Function() {
                 @Override
                 public void apply(DynamicRealmObject obj) {
                 obj.setBoolean("addedField", false);
             }
        });
        oldVersion++;
    }