2016-03-22 47 views
2

我想要做的迁移(境87.2)我以前做别人,但是这个人是不容易的,我不知道为什么境界迁移重复值

我previsoly 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: Illegal Argument: Field "id" cannot be a primary key, it already contains duplicate values:

什么呢?在分类课上没有重复的值,我很确定。

PS:这只是发生在我真正使用的迁移,并已PREVIOSLY的类别记录

---------------------编辑22/03

试图以此为Emanuelez`s建议:

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: Field 'id' does support null values in the existing Realm file. Remove @Required or @PrimaryKey from field 'id' or migrate using io.realm.internal.Table.convertColumnToNotNullable().

ve tried .setNullable(“ID”,真正的);`

什么都没有改变过

回答

3

要添加新的主键字段,你不能只是增加一个字段属性,因为所有这些领域将被初始化为它们的默认值,都是平等的,这就打破了主要合同。

要做到这一点,你必须以正确的方式:

  1. 创建一个新的领域
  2. 与新的唯一值填充新的领域
  3. 使新场主键

为了进一步的参考,我建议你看一下RealmObjectSchema类的单元测试,它可以被发现here

+0

尝试了这3个步骤,没有什么改变,只是错误,我想即时通讯做与你指出的测试完全一样的东西=( – user2582318

+0

任何更新?由于我仍然面临这个问题。 – AndoAiron