android DAO错误:-参数的类型必须是带@Entity注解的类或它的集合/数组

ffx8fchx  于 2023-10-14  发布在  Android
关注(0)|答案(5)|浏览(151)

我是Android开发的新手,我试图通过遵循Android架构组件来制作一个Notes应用程序,但在运行时,我在DAO中遇到了错误,如果有人能提供帮助,我将不胜感激。下面是我得到的代码和错误。

DAO:-
'''

@Dao
interface NoteDao {
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(note :Note)

    @Delete
    suspend fun delete(note : Note)

    @Query("SELECT * FROM Notes_table order by id")
    fun getALL(): LiveData<List<Note>>

    @Query("SELECT * From Notes_table where id= :pos")
    fun getSpecific(pos :Int):Note

}

'''
实体:-
'''

@Entity(tableName = "Notes_table")
data class Note(@ColumnInfo(name="noteText") val text:String) {
    @PrimaryKey(autoGenerate = true) var id:Int =0

}

'数据库:-
'''

@Database(entities = [Note::class],version = 1,exportSchema = false)
abstract class NoteDatabase : RoomDatabase() {

    abstract fun getNoteDao():NoteDao

    companion object{
        @Volatile
        private var Instance: NoteDatabase?=null

        fun getDatabase(context :Context):NoteDatabase{

            return Instance ?: synchronized(this){
                val instance=Room.databaseBuilder(context.applicationContext,
                NoteDatabase::class.java,"note_database").build()
                Instance=instance
                instance
            }
        }

    }

}

导入DAO:-

import androidx.lifecycle.LiveData
import androidx.room.

实体的进口:-

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey

数据库导入:-

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

如果需要,我可以提供其余的代码。

unhi4e5o

unhi4e5o1#

在注解部分的帮助下,通过阅读文档,我发现我的DAO出了问题,最终它与我添加到依赖项中的ROOM版本有关,我只是更新了那些,现在它工作得很好。

ffdz8vbo

ffdz8vbo2#

今天遇到了同样的问题,通过将Room版本从2.3.0更新到2.4.0-beta02来修复。版本可以在这里找到:https://developer.android.com/jetpack/androidx/releases/room#2.3.0-alpha04

ilmyapht

ilmyapht3#

我正在更新房间版本:2.4.2

implementation "androidx.room:room-runtime:2.4.2"
   kapt "androidx.room:room-compiler:2.4.2"
   implementation "androidx.room:room-ktx:2.4.2"
   androidTestImplementation "androidx.room:room-testing:2.4.2"
4xrmg8kj

4xrmg8kj4#

通过将房间版本提升到“2.4.0-beta 01”修复

0md85ypi

0md85ypi5#

2023年10月
kapt注解处理工具不适合我使用suspend函数。
我做了什么来修复它:
根构建.gradle

buildscript {
    ext.room_version = '2.5.2'
}
plugins {
    id 'com.android.application' version '8.1.2' apply false
    //kotlin gradle plugins
    id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
    id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false
}

我注意到 * Kotlingradle插件 * 版本必须匹配 *ksp插件 * 版本,否则它不工作(ksp版本1.8不适合我)。
app/build.gradle

plugins {
    //id 'kotlin-kapt'
    id "com.google.devtools.ksp"
}

dependencies {
    implementation "androidx.room:room-runtime:$room_version"
    ksp "androidx.room:room-compiler:$room_version"
    //DOES NOT WORK
    //kapt "androidx.room:room-compiler:$room_version"
    implementation "androidx.room:room-ktx:$room_version"
}

相关问题