Die akzeptierte Antwort Werke zu lösen, sondern ist eine schlechte Lösung, da es die zugrunde liegende Problem versteckt:
Sie haben Objekte, bei denen das Primärschlüsselfeld auf null gesetzt ist. Es ist wahrscheinlich ein Objekt, das RealmObject
erweitert, ist in der User
Objekt und nicht mit @Ignore
annotiert.
Hier ist ein Beispiel dafür, was passiert sein könnte:
sagen Lassen Sie Ihre User
Objekt enthält ein Objekt ContactInfo
, die ein Feld hat phoneNumber
das gesetzt wird, der Primärschlüssel zu sein.
Einige User
Objekte haben das Feld phoneNumber
von ContactInfo
auf null gesetzt.
Wenn Sie copyToRealm
, Realm versucht, alle User
Objekte hinzufügen und auch alle ContactInfo
Objekte, die diese User
Objekte enthalten. Bei einigen dieser ContactInfo
-Objekte wird das Primärschlüsselfeld auf null gesetzt. Dies funktioniert zum ersten Mal, da die Primärschlüsselfelder vom Typ String
, Byte
, Short
, Integer
und null sein können. Aber wenn Sie es zum zweiten Mal tun, werden Sie die Primärschlüsselbeschränkung durchbrechen.
Die Verwendung von copyToRealmOrUpdate
funktioniert, weil Sie nur die vorhandenen ContactInfo
Objekte mit dem Primärschlüssel auf Null aktualisieren. Sie können sehen, dass dies nicht beabsichtigt ist, und Sie müssen sicherstellen, dass alle Objekte, die Sie zu Realm hinzufügen, über richtige Primärschlüssel verfügen.