未解决的引用:RoomDatabase

4

我试图在我的应用程序中设置 Room(按照文档)。一切都编译得很好,除了我的 Database 类。找不到 RoomDatabase 类。值得注意的是,我正在使用 Jetpack Compose Desktop 应用程序而不是 Android。

import androidx.room.*

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)


@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
            "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}

@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4.10'
}

apply plugin: 'kotlin-kapt'

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    google()
    jcenter()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    def room_version = "2.2.5"
    implementation 'androidx.core:core-ktx:1.2.0'

    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

}

我只是从 https://developer.android.com/training/data-storage/room 复制并粘贴。 - Nailuj29
好的,我已经在我的问题中添加了代码。 - Nailuj29
你能否也发布一下你的Gradle文件? - beastlyCoder
你能解释一下你的意思吗? - Nailuj29
你在第一个例子中粘贴的代码,是全部在一个文件中吗?还是它们被分开了? - beastlyCoder
显示剩余4条评论
2个回答

1
问题在于所有内容都在一个文件中。你需要创建一个名为User.kt的文件:
@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

然后是一个 UserDao Kotlin 文件:
@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}

然后是一个应用程序数据库 Kotlin 文件:
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

我的建议是跟随这个教程。它将教你基础知识,并带你完成一个完整的应用程序。祝你好运:)


你按照我的建议创建了每个单独的类吗?你跟随教程做了吗? - beastlyCoder
是的,我已经按照那个教程操作了。这是在Jetpack Compose桌面应用程序中运行,而不是在Android上运行。我认为问题在于标准Gradle项目不能依赖AAR文件,而Android Gradle项目可以。 - Nailuj29

0

我成功地添加了这个功能

id 'com.stepango.aar2jar' version "0.6"

添加数据库初始化代码到我的主函数后,想将其返回到插件块。但是,由于安卓需要Context类进行数据库初始化,因此代码无法编译。


你最终使用了什么替代Room? - John Doe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接