参数的类型必须是使用@Entity或其集合/数组注释的类

Lin*_*daK 11 inheritance android dao kotlin android-room

好吧,所以我试着按照这个指南:https://medium.com/google-developers/7-pro-tips-for-room-fbadea4bfbd1 这导致我这个代码:https://gist.github.com/弗洛里纳-muntenescu/1c78858f286d196d545c038a71a3e864

当我遇到以下两个错误时,我试图做出自己的例子:

错误:参数的类型必须是使用@Entity或其集合/数组注释的类.

错误:无法在Dao类中使用未绑定的泛型.如果您正在尝试创建基本DAO,请创建一个普通类,使用类型params扩展它,然后使用@Dao标记子类.

我不知道这两个错误是否相互关联,但我不知道它们发生在哪里,并且不能排除它们是相关的.

@Entity
public class Data {
@PrimaryKey
uuid: String
title: String
}
Run Code Online (Sandbox Code Playgroud)

我的父母道

@Dao
abstract class BaseDao<in T> {

@Insert
abstract fun insert(obj: T)

@Insert
abstract fun insert(vararg obj: T)

@Update
abstract fun update(obj: T)

@Delete
abstract fun delete(obj: T)
}
Run Code Online (Sandbox Code Playgroud)

我的子类dao

@Dao
abstract class SubclassDao : BaseDao<Data> {

@Query("SELECT * FROM Data WHERE uuid = :id")
abstract fun getDataById(id: String): LiveData<Data>

@Query("SELECT * FROM BowelMovementEvent")
abstract fun getData(): List<Data>

@Query("SELECT * FROM BowelMovementEvent")
abstract fun getEventById(id: String): LiveData<Data>
}
Run Code Online (Sandbox Code Playgroud)

kes*_*hav 12

我遇到了同样的错误

@Insert
fun insertCars(vararg cars: List<Car>)
Run Code Online (Sandbox Code Playgroud)

我通过删除vararg修复了它

@Insert
fun insertCars(cars: List<Car>)
Run Code Online (Sandbox Code Playgroud)


小智 5

对于遇到问题的任何人:参数的类型必须是用 @Entity 注释的类或其集合/数组

此错误表明使用 BaseDao 的 Dao 没有该数据类型的有效类。例如,此代码中,DataDao 定义要使用的类数据类型为“Data”类型(DataDao.kt 的第 23 行),该类型由包含 @Entity 标记的 Data.kt 类定义(Data.kt 的第 22 行) )。

所以...如果您遇到此错误,则该错误不是源自 BaseDao 接口,而是源自使用 BaseDao 的 Dao。

我希望这有帮助!