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

时间:2018-01-26 00:09:07

标签: android inheritance kotlin dao android-room

Okey,所以我尝试按照本指南进行操作:https://medium.com/google-developers/7-pro-tips-for-room-fbadea4bfbd1 这让我想到了这段代码:https://gist.github.com/florina-muntenescu/1c78858f286d196d545c038a71a3e864

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

  

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

     

错误:无法在Dao类中使用未绑定的泛型。如果你想   创建一个基础DAO,创建一个普通类,用类型参数扩展它   然后用@Dao标记子类。

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

@Entity
public class Data {
@PrimaryKey
uuid: String
title: String
}

我的父母dao

@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)
}

我的子类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>
}

2 个答案:

答案 0 :(得分:3)

我也遇到了相同的错误

@Insert
fun insertCars(vararg cars: List<Car>)

我通过删除 vararg

修复了该问题
@Insert
fun insertCars(cars: List<Car>)

答案 1 :(得分:2)

对于有问题的任何人:参数的类型必须是带有@Entity注释的类或它的集合/数组

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

所以...如果遇到此错误,则该错误不是起源于BaseDao界面,而是使用BaseDao的Dao。

我希望这会有所帮助!