web-dev-qa-db-ja.com

パラメータのタイプは、@ Entityで注釈が付けられたクラスまたはそのコレクション/配列である必要があります

わかりましたので、このガイドに従ってみました: https://medium.com/google-developers/7-pro-tips-for-room-fbadea4bfbd1 このコードに私を導きました: https://Gist.github.com/florina-muntenescu/1c78858f286d196d545c038a71a3e864

次の2つのエラーが発生したときに、独自の例を作成しようとしました。

エラー:パラメータのタイプは、@ Entityで注釈が付けられたクラスまたはそのコレクション/配列である必要があります。

エラー:Daoクラスではバインドされていないジェネリックを使用できません。ベースDAOを作成しようとしている場合は、通常のクラスを作成し、それをparams型で拡張してから、サブクラスを@Daoでマークします。

これらの2つのエラーが互いに関連しているかどうかはわかりませんが、どこで発生しているかはわかりません。

@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

@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>
}
13
LindaK

同じエラーが発生しました

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

varargを削除して修正しました

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

問題を抱えているすべての人へ:パラメータのタイプは、@ Entityで注釈が付けられたクラスまたはそのコレクション/配列である必要があります

このエラーは、BaseDaoを利用するDaoにそのデータ型の有効なクラスがないことを示しています。例 here このコードでは、DataDaoは、使用されるクラスdatatypeが、@ Entityタグを含むData.ktクラスによって定義される「Data」タイプ(DataDao.ktの行23)であることを定義しています(Data.ktの22行目)。

したがって、このエラーが発生した場合、エラーはBaseDaoインターフェースではなく、BaseDaoを使用しているDaoに起因しています。

これが役に立てば幸いです!

2
EarlyWild