Realm 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

at 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. В примерах Kotlin, размещенных на GitHub, есть модели, написанные на чистой Java.


person Mariusz    schedule 05.12.2015    source источник
comment
Вы установили proguard, но не включили его   -  person Maheshwar Ligade    schedule 05.12.2015
comment
все еще бросает исключение   -  person Mariusz    schedule 05.12.2015
comment
Добавить правила области в файл pro-guard   -  person Maheshwar Ligade    schedule 05.12.2015
comment
я делал это раньше   -  person Mariusz    schedule 05.12.2015
comment
добавить одну строку - сохранить класс io.realm.annotations.RealmModule   -  person Maheshwar Ligade    schedule 05.12.2015
comment
документ области уже сказал добавить эту строку, я разместил свой файл proguard   -  person Mariusz    schedule 05.12.2015
comment
Вы уверены, что включили обработку аннотаций?   -  person Maheshwar Ligade    schedule 05.12.2015
comment
я не могу найти обработку аннотаций в настройках Android Studio   -  person Mariusz    schedule 05.12.2015


Ответы (3)


"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

person ShadowRogue7    schedule 07.01.2016

Чтобы 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"
person Christian Melchior    schedule 07.12.2015
comment
градиентный бросок Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > java.lang.NoClassDefFoundError: io/realm/annotations/RealmClass - person Mariusz; 07.12.2015
comment
Все еще необходимо использовать kapt "io.realm:realm-annotations-processor:$realm_version" kapt "io.realm:realm-annotations:$realm_version" , чтобы Realm работал с Kotlin? - person lagos; 03.06.2016
comment
Нет, мы добавляем это автоматически, когда вы используете плагин Realm. - person Christian Melchior; 03.06.2016

Для себя я добавил @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

person Youngjae    schedule 16.05.2016