安卓开发使用Room框架时DAO报错参数需为@Entity注解类求解决
报错的核心原因是Room无法识别你DAO方法中参数的类型为被@Entity注解的类,按以下步骤排查即可解决:
- 第一步:补全DAO类的导入语句
你当前提供的DAO导入不完整,仅写了半截导入,缺少Room相关注解的导入,补全为以下内容:
import androidx.lifecycle.LiveData import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query
- 第二步:检查DAO方法调用处的参数类型
确认你调用insert()、delete()方法时,传入的参数是标注了@Entity的Note类实例,不要传入其他类型的参数。 - 第三步:检查Note类的导入是否正确
确认DAO文件中导入的Note类,是你编写的标注了@Entity的Note类,而非其他包下的同名类。 - 第四步:清理编译缓存
如果以上步骤都没有问题,执行Android Studio菜单栏的Build -> Clean Project,再执行Build -> Rebuild Project,清除Room注解处理器的旧缓存后重新编译即可。
补全后可用的完整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 }
内容的提问来源于stack exchange,提问作者Tushar Verma
相关产品推荐
相关产品推荐

