代码之家  ›  专栏  ›  技术社区  ›  Alexey K

Realm android迁移-将int改为string[重复]

  •  -1
  • Alexey K  · 技术社区  · 6 年前

    我想将领域字段的数据类型从 String int 仅供参考,该领域也是 Primary Key . 我找不到方法 RealmMigration 来解决这个问题。

    PS:我的应用程序已经投入生产,该字段中当前的所有值都是整数。

    编辑1

    我的模特班

    public class Team extends RealmObject {
        @SerializedName("id")
        @PrimaryKey
        private int id;
        @SerializedName("name")
        private String name;
        @SerializedName("description")
        private String description;
    }
    

    我在尝试克里斯蒂安的答案后移民

    if (oldVersion == 6) {
                RealmObjectSchema teamSchema = schema.get("Team");
                teamSchema.addField("temp_id", int.class)
                        .transform(new RealmObjectSchema.Function() {
                            @Override
                            public void apply(DynamicRealmObject obj) {
                                obj.setInt("temp_id", Integer.valueOf(obj.getString("id")));
                            }
                        })
                        .removeField("id")
                        .renameField("temp_id", "id")
                        .addPrimaryKey("id");
            }
    
    0 回复  |  直到 9 年前
        1
  •  24
  •   Christian Melchior    9 年前

    虽然没有一个单一的线性方法,但是您可以遵循与迁移示例中相同的模式: https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/model/Migration.java#L132-L132

            schema.get("MyClass")
                .addField("new_key", int.class)
                .transform(new RealmObjectSchema.Function() {
                    @Override
                    public void apply(DynamicRealmObject obj) {
                        obj.setInt("new_key", Integer.valueOf(obj.getString("old_key")));
                    }
                })
                .removeField("old_key")
                .addPrimaryKey("new_key")
                .renameField("new_key", "old_key");