Я использую Kotlin, и я хочу добавить новое поле в объект RealmObject
и это поле может быть нулевым. Вот что у меня в моей миграции:
val schema = realm.schema.get(ZOLA_NOTIFICATION) if (!(schema?.hasField("agentId") ?: false)) { schema.addField("agentId", Long::class.java) }
Однако при выполнении этой миграции появляется сообщение об ошибке:
Non-fatal Exception: io.realm.exceptions.RealmMigrationNeededException Field 'agentId' does not support null values in the existing Realm file. Either set @Required, use the primitive type for field 'agentId' or migrate using RealmObjectSchema.setNullable().
Как указать, что Long::class.java
должен быть типом NULL в коде миграции?
К сожалению,
Long::class.java // kotlin
эквивалентно
long.class // java Long::class.javaPrimitiveType // kotlin
Но то, что вам нужно добавить для nullable Long в Realm,
Long.class // java
Поэтому вам нужно использовать
Long::class.javaObjectType // Long.class
В процессе миграции вы можете превратить обязательное поле в поле с RealmObjectSchema.setNullable(String field, boolean nullable)
значением, используя RealmObjectSchema.setNullable(String field, boolean nullable)
.