【发布时间】:2016-03-22 05:34:34
【问题描述】:
我想做一个迁移(Realm 87.2)我以前做过其他人,但这并不容易,我不知道为什么
我以前的 Categoriy.class
private int code;
private String title;
private String category;
private int order;
private boolean visible;
新的 Category.class
@PrimaryKey @Index private String id;
private int code;
private String title;
private String category;
private int order;
private boolean visible;
在 Migration.class 中
public class Migration....
int i = 0;
.....
if(oldVersion == 7) {
schema.get("Category").addField("id", String.class, FieldAttribute.PRIMARY_KEY).transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("id", UtilsForAll.getRandomUUID()); //Get Random UUID for previsoly added categories
obj.set("order", i);
i++;
}
});
oldVersion++;
}
} //finishClass
出于某种愚蠢的原因,我不知道我做错了什么,它一直给我这个错误:
java.lang.IllegalArgumentException:非法参数:字段“id” 不能是主键,它已经包含重复值:
什么?类别类中没有重复值,我很确定。
PS:这只是在我真正使用迁移并且之前有过类别记录时发生
--------------------- 22/03 编辑
按照 Emanuelez 的建议进行了尝试:
if(oldVersion == 7) {
schema.get("Category").addField("id", String.class);
schema.get("Category").transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("id", UtilsForAll.getRandomUUID()); //Get Random UUID for previsoly added categories
}
});
oldVersion++;
schema.get("Category").setPrimaryKey("id");
}
错误变成了这个 -
io.realm.exceptions.RealmMigrationNeededException: 字段 'id' 确实 支持现有领域文件中的空值。删除 @Required 或 来自字段“id”的@PrimaryKey 或使用迁移 io.realm.internal.Table.convertColumnToNotNullable()。
ive tried.setNullable("id", true);`
也没有任何改变
【问题讨论】: