【发布时间】:2017-10-19 07:23:20
【问题描述】:
我正在尝试使用 Kotlin 和 Room Persistence Library 编写一个简单的应用程序。 我在 Android Persistence 代码实验室中关注了the tutorial。
这是我在 Kotlin 中的 AppDatabase 课程:
@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
房间版:1.0.0-alpha1
有没有人有这方面的经验?
编辑:
使用kapt 解决了我的问题。就我而言,我必须将annotationProcessor 替换为kapt。
【问题讨论】:
-
你也可以发布你的 build.gradle 吗?
-
你的模块 build.gradle 中有
apply plugin: 'kotlin-kapt'和kapt "android.arch.persistence.room:compiler:1.0.0-alpha1"吗? -
谢谢。使用 kapt 插件解决了我的问题。
-
@ThanhPham 我也有同样的问题,但是添加 kapt 会引入一些 gradle 错误,请看这里stackoverflow.com/questions/44142964/…。你能提供你的 gradle 文件吗?
-
@chandil03 我看到你只是添加了 kapt。就我而言,我必须用 kapt 替换 annotationProcessor。
标签: database kotlin kapt android-room