Kotlin とRoom Persistence Libraryを使用して簡単なアプリを作成しようとしています。Android Persistence Codelabのチュートリアルに従いました。
AppDatabase
Kotlinでの私のクラスは次のとおりです。
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userModel(): UserDao
companion object {
private var INSTANCE: AppDatabase? = null
@JvmStatic fun getInMemoryDatabase(context: Context): AppDatabase {
if (INSTANCE == null) {
INSTANCE = Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).allowMainThreadQueries().build()
}
return INSTANCE!!
}
@JvmStatic fun destroyInstance() {
INSTANCE = null
}
}
}
しかし、アプリを実行しようとすると、すぐにクラッシュします。クラッシュログは次のとおりです。
Caused by: java.lang.RuntimeException: cannot find implementation for com.ttp.kotlin.kotlinsample.room.AppDatabase. AppDatabase_Impl does not exist
at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:90)
at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:340)
at com.ttp.kotlin.kotlinsample.room.AppDatabase$Companion.getInMemoryDatabase(AppDatabase.kt:19)
at com.ttp.kotlin.kotlinsample.MainKotlinActivity.onCreate(MainKotlinActivity.kt:28)
at android.app.Activity.performCreate(Activity.java:6272)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access$900(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
クラスAppDatabase_Impl
が自動生成されていないようです。Codelab からダウンロードした元の Java アプリを確認したところ、自動生成されていることがわかりましたAppDatabase_Impl
。
Kotlin バージョン: 1.1.2-3
Room バージョン:1.0.0-alpha1
これを経験した人はいますか?
編集:
使用kapt
すると問題が解決します。私の場合、 に置き換える必要annotationProcessor
がありkapt
ます。