使用RealmMigration在Realm Android中将数据类型从String更改为Long

时间:2017-02-07 04:59:08

标签: android realm type-conversion realm-migration

final RealmObjectSchema customerSchema = schema.get("Customer");
customerSchema.removeField("creditPeriod")
    .addField("creditPeriod", Long.class);

以上是我用于领域迁移的代码。我删除了以前字符串已经存在的字段,然后在迁移代码和Pojo.class中添加了相同的字段更改其数据类型

1 个答案:

答案 0 :(得分:9)

下面我刚才提到了一个使用@ christian-melchior评论中提到的示例将字段类型从String迁移到int的示例

public class DataMigration implements RealmMigration {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();

        ......

        // Modify your check according to your version update.
        if(oldVersion == 1) {
            // Below I am going to change the type of field 'id' from 'String' to 'int'

            // Get Schema of a Particular Class. Change --Testing-- with the respected pojo class name
            RealmObjectSchema schema = schema.get("Testing");

            // Add a new temporary field with the new type which you want to migrate. 'id_tmp' is a temporary integer field.
            schema.addField("id_tmp", int.class);

            // Set the previous value to the new temporary field
            schema.transform(new RealmObjectSchema.Function() {
                @Override
                public void apply(DynamicRealmObject obj) {
                    // Implement the functionality to change the type. Below I just transformed a string type to int type by casting the value. Implement your methodology below.
                    String id = obj.getString("id");

                    obj.setInt("id_tmp", Integer.valueOf(id));
                }
            });

            // Remove the existing field
            schema.removeField("id");

            // Rename the temporary field which hold the transformed value to the field name which you insisted to migrate.
            schema.renameField("id_tmp", "id");

            oldVersion++;
        }

        ......

    }
}
  

请勿忘记更新架构版本,并在RealmConfiguration域实例中引用上述迁移类实例。