我尝试使用 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.**
>中的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编写的模型
答案 0 :(得分:2)
“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"
答案 1 :(得分:1)
要让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"
答案 2 :(得分:0)
对我来说,我已将@RealmClass
添加到所有模型并修复it is not required。
我认为它强制使用注释器正确运行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