final RealmObjectSchema customerSchema = schema.get("Customer");
customerSchema.removeField("creditPeriod")
.addField("creditPeriod", Long.class);
以上是我用于领域迁移的代码。我删除了以前字符串已经存在的字段,然后在迁移代码和Pojo.class中添加了相同的字段更改其数据类型
答案 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
域实例中引用上述迁移类实例。