El reino Kotlin no está en el esquema

Intento usar Realm.io para almacenar datos en Android tengo RealmClass

 @RealmClass public open class Alarm : RealmObject() { @Requinetworking public open var hourOfDay: Int? = null @Requinetworking public open var minute: Int? = null @Requinetworking public open var days: BooleanArray? = null public open var name: String? = null } 

y en onCreate bash agregar algunos datos de testing

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mRealm = Realm.getInstance(activity); mRealm.beginTransaction() var a = mRealm.createObject(Alarm::class.java) a.hourOfDay = 12 a.minute = 1; a.days = booleanArrayOf(true, true, true, true, true, false, false); a.name = "Test${System.currentTimeMillis()}" mRealm.commitTransaction() } 

pero tengo una exception.

 > java.lang.IllegalArgumentException: Alarm is not part of the schema for this Realm 

en var a = mRealm.createObject(Alarm::class.java)

he establecido reglas de reino

 -keep class io.realm.annotations.RealmModule -keep @io.realm.annotations.RealmModule class * -keep class io.realm.internal.Keep -keep @io.realm.internal.Keep class * -dontwarn javax.** -dontwarn io.realm.** 

en > proguard-rules.pro

 buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { realmFlavor { proguardFile 'proguard-rules.pro' } } 

pero esto no trajo solución

CONCLUSIÓN

hasta ahora parece que tenemos que escribir models en Java, Realm y cualquier biblioteca ORM. Los ejemplos de Kotlin publicados en GitHub tienen models escritos en Java puro.

"java.lang.NoClassDefFoundError: io / realm / annotations / RealmClass"

Si se encuentra con el error anterior, lo más probable es que tenga que agregar algo como esto a su build.gradle. Las dos líneas inferiores para kapt son la key.

 //Realm compile 'io.realm:realm-android:0.87.1' kapt "io.realm:realm-annotations:0.87.1" kapt "io.realm:realm-annotations-processor:0.87.1" 

Según el comentario al final de este número: https://github.com/realm/realm-java/issues/509

Para que Kotlin trabaje con el procesador de annotations de Realm necesita la siguiente configuration en su build.gradle

 compile "io.realm:realm-android-library:0.86.0@aar" compile "io.realm:realm-annotations:0.86.0" kapt "io.realm:realm-annotations-processor:0.86.0" 

Para mí, agregué @RealmClass a todos los models y lo arreglé a pesar de que no es obligatorio .

Creo que obliga a ejecutar el procesador Realm correctamente mediante el uso de anotador.

Para verificar si los models RealmObject se procesan o no, la salida de la console Gradle (puede abrirla en Android Studio en el panel de la parte inferior derecha) tiene que mostrar el logging de procesamiento del model rojo como se muestra a continuación.

 :app:compileDebugJavaWithJavac Full recomstacktion is requinetworking because at least one of the classes of removed jar 'kotlin-stdlib-1.0.0.jar' requires it. Analysis took 1.572 secs. Note: Processing class ModelSomething Note: Processing class ModelAnotherThing Note: Creating DefaultRealmModule Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. :app:transformClassesWithRealmTransformerForDebug :app:transformClassesWithInstantRunVerifierForDebug :app:transformClassesWithJavaResourcesVerifierForDebug 

La Note: líneas son de color rojo y puede ver el post de Processing class ModelSomething .

Todo su model debe aparecer como este post.

Este problema se archivó como un error sospechoso: https://github.com/realm/realm-java/issues/2822

  • kotlin - reino y package
  • Kotlin y @Transient
  • no se puede crear ArrayList dentro de la subclass RealmObject
  • La aplicación del complemento Realm en el proyecto Kotlin produce un error de compilation
  • Reino que devuelve datos obsoletos
  • Función de extensión Kotlin: reference no resuelta
  • Cómo insert el object RealmList con copyToRealm
  • Escribir Daos del reino con transactions cerradas
  • Parceler: no se puede encontrar el generador de lectura / escritura para el tipo io.realm.RealmList
  • Float es un campo no válido para la comparación de Realm
  • No se puede build el proyecto de Android después de agregar la class Realm