0

我正在使用 Realm android 并想使用迁移更改现有主键的数据类型。

我使用以下代码进行迁移

schema.get("Test")
      .addField("id_new", String.class)
      .removeField("id")
      .addPrimaryKey("id_new")
      .renameField("id_new", "id");

上面的代码是在不中断的情况下迁移架构,但是如果我尝试在新架构中写入数据,它就会失败。

我不想保留任何旧数据,因此不使用转换方法。

4

1 回答 1

1

如果你不想持久化数据,你可以调用builder 的deleteRealmIfMigrationNeeded()方法:

RealmConfiguration config = new RealmConfiguration.Builder()
                                          .deleteRealmIfMigrationNeeded()
                                          .build();

但我认为,它仅适用于应用程序的开发周期。

发布的应用程序必须有真正的迁移脚本。对于您的问题,我建议使用:

schema.get("Test")
  .addField("id_new", String.class, FieldAttribute.PRIMARY_KEY)
  .transform(new RealmObjectSchema.Function() {
                    @Override
                    public void apply(DynamicRealmObject obj) {
                        // yuors transformation from id to id_new
                    }
                })
  .removeField("id")
  .renameField("id_new", "id");

也可以看看:

官方文档

迁移示例类

于 2016-12-23T10:04:45.393 回答