Тип параметра должен быть классом, аннотированным @Entity, или его коллекцией / массивом.

Хорошо, поэтому я попытался следовать этому руководству: 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
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
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>
}

person LindaK    schedule 26.01.2018    source источник
comment
Удачи с этими BowelMovements!   -  person Sam    schedule 26.01.2018
comment
@Sam ха-ха, я думал, что все упростил. Спасибо хоть!   -  person LindaK    schedule 26.01.2018
comment
@KenWhite Я пробовал это решение, но все равно получаю ту же ошибку, хотя я делаю EventDao и его методы абстрактными.   -  person LindaK    schedule 26.01.2018
comment
Я имел в виду BaseDao   -  person LindaK    schedule 26.01.2018
comment
@LindaK, вы решили проблему?   -  person CoolMind    schedule 12.04.2018
comment
Судя по сообщению об ошибке @Dao надо удалить с BaseDao   -  person Alexander Egger    schedule 16.07.2018


Ответы (2)


У меня была такая же ошибка для

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

Я исправил это, удалив vararg

@Insert
fun insertCars(cars: List<Car>)
person Keshav    schedule 10.08.2018

Для всех, у кого есть проблема: Тип параметра должен быть классом, аннотированным @Entity, или его коллекцией / массивом.

Эта ошибка указывает на то, что Dao, использующий BaseDao, не имеет допустимого класса для этого типа данных. Например, здесь. В этом коде DataDao определяет, что используемый тип данных класса - это type " Data »(строка 23 DataDao.kt), который определяется классом Data.kt, содержащим тег @Entity (строка 22 Data.kt).

Итак ... если вы столкнулись с этой ошибкой, ошибка НЕ ​​связана с интерфейсом BaseDao, а скорее с Dao, которые используют BaseDao.

Надеюсь, это поможет!

person EarlyWild    schedule 17.07.2018