2016-03-22 8 views
2

ich eine Migration tun will (Realm 87,2) i andere tat vor, aber dies ist nicht einfach, und ich weiß nicht, warumRealm Migration duplizierte Werte

meine previsoly Categoriy.class

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

die neue Category.class

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

und am Migration.class

aus irgendeinem dummen Grund und ich weiß nicht, was im falsch zu machen, halten Sie es mir diesen Fehler geben:

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

WAS? Es gibt keine doppelten Werte in der Kategorie Klasse, ich bin mir ziemlich sicher.

PS: Dies geschieht nur, wenn ich wirklich die Migration verwenden und hat previosly KATEGORIE RECORDS

--------------------- EDIT 22/03

versucht, dies als Emanuelez`s Vorschlag:

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

der Fehler in diesem gedreht -

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

i ve tried .setNullable („id“, true); `

nichts geändert zu

Antwort

3

Um ein neues Primärschlüsselfeld fügen Sie ein Feld mit dem Attribute nicht nur hinzufügen können, da all diese Felder auf ihren Standardwert initialisiert werden , alle gleich sind, was den Primärschlüsselvertrag bricht.

dies den richtigen Weg zu tun, Sie zu haben:

  1. ein neues Feld
  2. füllen Sie das neue Feld mit neuen unterschiedlichen Werten
  3. macht das neue Feld einen Primärschlüssel
erstellen

Als weitere Referenz empfehle ich Ihnen, die Komponententests für die RealmObjectSchema-Klasse zu betrachten, die here

gefunden werden kann
+0

versuchte diese 3 Schritte, nichts geändert, nur der Fehler, und ich denke, dass ich genau das gleiche tun, wie der Test, den Sie mir = = ( – user2582318

+0

Any Update ?? Da ich immer noch mit diesem Problem konfrontiert bin. – AndoAiron

Verwandte Themen