境界Kotlin不在架构中

我尝试使用Realm.io在android中存储数据我有RealmClass

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

并在onCreate我尝试添加一些测试数据

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

但我得到例外。

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

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

我已经设置了领域规则

 -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.** 

in > proguard-rules.pro

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

但是这并没有带来解决方案

结论

到目前为止,它看起来像我们必须在Java,Realm和任何ORM库中编写模型在GitHub上发布的Kotlin示例有用纯Java编写的模型

“java.lang.NoClassDefFoundError:io / realm / annotations / RealmClass”

如果你遇到上面的错误,你很可能必须添加这样的东西到你的build.gradle。 kapt底部的两行是关键。

 //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" 

根据本期最后的评论: https : //github.com/realm/realm-java/issues/509

要让Kotlin与Realm的注释处理器一起工作,您需要在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" 

对我而言,我将@RealmClass添加到所有模型并进行了修复,尽管这不是必需的 。

我认为它强制使用注释器来正确运行Realm处理器。

要检查RealmObject模型是否被处理,您的Gradle控制台输出(您可以在Android Studio的右下方切换面板中打开它)必须显示红色模型处理日志,如下所示。

 :app:compileDebugJavaWithJavac Full recompilation is required 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 

Note:线是红色的,你可以看到Processing class ModelSomething消息。

所有你的模型应该被列为这个消息。

这个问题是作为一个可疑的错误提交: https : //github.com/realm/realm-java/issues/2822