2016-03-22 6 views
2

değerleri, ama bu kolay değil ve ben bilmiyorum nedenDiyar Göç Yinelenen i evvel başkalarının yaptığı bir Göç (Diyar 87.2) yapmak istiyorum

benim previsoly Categoriy.class

private int code; 
private String title; 
private String category; 
private int order; 
private boolean visible; 

@PrimaryKey @Index private String id; 
    private int code; 
    private String title; 
    private String category; 
    private int order; 
    private boolean visible; 

ve Migration.class

yeni Category.class 0 aptal bir nedenden dolayı
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 

ve ben ne yanlış yaptığını im bilmiyorum, bana bu hatayı vermeye devam:

java.lang.IllegalArgumentException: Illegal Argument: Field "id" cannot be a primary key, it already contains duplicate values:

NE? Kategori sınıfında yinelenen değerler yok, oldukça eminim.

Not: bu sadece ben gerçekten Migration kullanırken olan ve HAS previosly KATEGORİ KAYITLAR

--------------------- DÜZENLEME 22/03

-

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().

ihata bu bir dönüştü

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"); 
    } 

:

Emanuelez`s öneri olarak bu çalıştı.setNullable (true "id"); tüm bu alanları varsayılan değer başlatılır çünkü `

şey sadece özelliği olan bir alan ekleyemezsiniz yeni bir birincil anahtar alanı eklemek için çok

cevap

3

değişti Birincil anahtar sözleşmeyi bozan, hepsi eşit olmak.

bu Mecbur doğru şekilde yapmak için:
  • yapmak yeni alan yeni farklı değerlerle yeni alanı doldurmak yeni bir alan
  • oluşturmak

    1. Birincil anahtar

    Daha fazla bilgi için, here

    bulunabilir RealmObjectSchema sınıfı için birim testlerine göz atmanızı öneririm
  • +0

    , bu 3 adımı denedi, hiçbir şey değişmedi, sadece hata ve ben de bana işaret ettiğin testle aynı şeyi yapıyorum = ( – user2582318

    +0

    Herhangi bir güncelleme var mı? Hala bu sorunla karşı karşıya olduğum için. – AndoAiron