首页 > 解决方案 > 无法使用 Room 数据库

问题描述

我想使用Room数据库,但在构建应用程序时出现此错误:

执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

和一些像这样的错误:

错误:不确定如何将 Cursor 转换为此方法的返回类型 (java.util.ArrayList<com.example.kotlin.Model.BookmarkModel>)。

我将Room数据库与这些类一起使用:

书签实体:

@Entity(tableName = "bookmark")
class BookmarkEntity(
    @PrimaryKey(autoGenerate = true)
    var id: Int,
    @ColumnInfo(name = "TITLE")
    var title: String,
    @ColumnInfo(name = "URL")
    var url: String,
    @ColumnInfo(name = "IMAGE")
    var image: String
)

书签数据库:

@Database(entities = [BookmarkEntity::class], version = 1)
abstract class BookmarkDataBase : RoomDatabase() {

    abstract fun bookmark(): BookmarkDAO

    companion object {
        private var instance: BookmarkDataBase? = null
        fun getInstance(context: Context): BookmarkDataBase {
            if (instance == null)
                instance =
                    Room.databaseBuilder(context, BookmarkDataBase::class.java, "bookmark")
                        .allowMainThreadQueries()
                        .fallbackToDestructiveMigration()
                        .build()
            return instance!!
        }
    }
}

书签道:

@Dao
interface BookmarkDAO {

    @Insert
    fun insertData(bookmarkEntity: BookmarkEntity): Boolean

    @Query("select * from bookmark")
    fun getData(): ArrayList<BookmarkModel>

    @Query("DELETE FROM bookmark WHERE id = :id")
    fun deleteData(id: Int)

    @Delete
    fun deleteData(bookmarkEntity: BookmarkEntity)

}

我将此依赖项添加为Room

implementation "androidx.room:room-runtime:2.2.5"
kapt "androidx.room:room-compiler:2.2.5"

并添加build.gradle文件apply plugin: 'kotlin-kapt'的顶部。但是仍然会出现该错误。你能帮助我吗?

标签: androidkotlinandroid-room

解决方案


问题是Room的查询函数只能返回一个由 注释的类的实例@Entity。所以BookmarkDAO.getData()不能返回列表BookmarkModel

所以:

@Query("select * from bookmark")
fun getData(): List<BookmarkEntity>

推荐阅读