因此,作为我论文的一部分,我目前正在尝试将房间数据库添加到一个开源项目中,我从 android 本身抓取了我能找到的最新示例,并针对 Kotlin DSL 对其进行了修改,我使用了相同的 DAO 和数据库结构,但两者都有导入错误。通常这不是要修复的问题,除非我在某些地方从同一个库中收到错误,这就是为什么我不得不首先问这个问题。主要的导入问题与 androidx.room 有关。下面是有问题的 kotlin 文件,之后是 build.gradle.kts。
补充一下,android studio 建议我使用 persistence.room.runtime,但根据我的尝试和我能找到的内容,这也不能解决我的问题。
import androidx.room.Database //works
import androidx.room.Room // unresolved reference
import androidx.room.RoomDatabase // unresolved reference
@Database(entities = [GameDatabase::class], version = 1, exportSchema = false)
abstract class Database : RoomDatabase() {
abstract val DatabaseDAO: DatabaseDAO
companion object {
@Volatile
private var INSTANCE: Database? = null
fun getInstance(): Database {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
Database::class.java,
"game_database"
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
}
return instance
}
}
}
}
这是模块 gradle 构建:
plugins {
//id("kotlin")
kotlin("kapt")
//kotlin("android")
//kotlin("android-extensions")
//id("kotlin-android")
//id("kotlin-android-extensions")
//id("androidx.navigation.safeargs")
}
java {
sourceCompatibility = JavaVersion.VERSION_1_6
}
tasks {
compileJava {
options.encoding = "UTF-8"
}
compileTestJava {
options.encoding = "UTF-8"
}
}
sourceSets {
main {
java.srcDir("src/")
}
}
// added
dependencies {
val room_version = "2.2.6"
val life_version = "2.2.0"
// Room and Lifecycle dependencies
implementation("androidx.room:room-runtime:$room_version")
kapt("androidx.room:room-compiler:$room_version")
//implementation("androidx.room:room-ktx:$room_version")
implementation("androidx.legacy:legacy-support-v4:1.0.0")
implementation("androidx.lifecycle:lifecycle-extensions:$life_version")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$life_version")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$life_version")
implementation("androidx.lifecycle:lifecycle-common-java8:$life_version")
// adding Firebase dependencies
//implementation("android.arch.persistence.room:runtime:1.1.1")
//annotationProcessor("android.arch.persistence.room:compiler:2.2.6")
}
我对 Kotlin DSL 很陌生,所以这可能是一个明显的错误,但我在该地区也找不到类似的东西。
最佳答案
这是我通常放置实现的方式:
//Room
implementation "androidx.room:room-runtime:2.2.6"
kapt "androidx.room:room-compiler:2.2.6"
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:2.2.6"
还有,你有没有安装kapt插件?如果不是:
plugins {
id 'kotlin-android'
id 'kotlin-kapt'//this one
然后,尝试清理并重建项目。
关于android - 为什么其中一些来自同一个库的导入会作为未解析的引用返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66572733/