Java – You can’t set up Realm in your project using Kotlin

You can’t set up Realm in your project using Kotlin… here is a solution to the problem.

You can’t set up Realm in your project using Kotlin

I’m trying to build a test project in Kotlin using Realm.
Here is my model:

open class Book : RealmObject() {

 Standard getters & setters generated by your IDE...
    @PrimaryKey
    open var id: Long = 0

open var title = ""

open var description = ""

open var author = ""

open var imageUrl = ""
}

Here’s the exception I get :

FATAL EXCEPTION: main
                                                                        Process: app.androidhive.info.realm, PID: 18782
                                                                        java.lang.RuntimeException: Unable to start activity ComponentInfo{app.androidhive.info.realm/app.androidhive.info.realm.activity. MainActivity}: java.lang.IllegalArgumentException: Book is not part of the schema for this Realm
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                            at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                            at android.os.Looper.loop(Looper.java:148)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                         Caused by: java.lang.IllegalArgumentException: Book is not part of the schema for this Realm

I looked around for a solution and added classpath "io.realm:realm-gradle-plugin:2.2.2" to build.gradle
Application plugins: 'realm-android' and

dependencies {
    ...
     Realm
    compile 'io.realm:realm-android:0.87.4'
    kapt "io.realm:realm-annotations:0.87.4"
    kapt "io.realm:realm-annotations-processor:0.87.4"
}

Go to the build script in the module application. It gives me another question:

Error:(15, 48) Cannot access '<init>': it is public/*package*/ in  
'Builder'
/Volumes/Toshiba/Users/macuser/Development/Android/Exersises/MyApplication/app/src/main/java/realmtest/realm/RealmController.kt
Error:(27, 15) Unresolved reference: refresh
Error:(34, 15) Unresolved reference: clear
Error:(53, 23) Unresolved reference: allObjects

[KOTLIN] deleting /Volumes/Toshiba/Users/macuser/Development/Android/Exersises/MyApplication/app/build/tmp/kotlin-classes/debug on error

Only if Book is written in java can I successfully build my project.
Any suggestions for Realm and Kotlin to work together?

Solution

Use RealmClass annotations + RealmModel interface (interface).

import io.realm.Realm
import io.realm.RealmModel
import io.realm.annotations.PrimaryKey
import io.realm.annotations.RealmClass

@RealmClass
open class Example(
    @PrimaryKey open var Id : Long = 0,
    open var Field : String = ""
) : RealmModel

Added in the module gradle file

apply plugin: 'realm-android'

Added in the project gradle file

classpath "io.realm:realm-gradle-plugin:2.2.2"

No additional compilation/kapt is required

Related Problems and Solutions