わかりましたので、このガイドに従ってみました: 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>
}
同じエラーが発生しました
@Insert
fun insertCars(vararg cars: List<Car>)
varargを削除して修正しました
@Insert
fun insertCars(cars: List<Car>)
問題を抱えているすべての人へ:パラメータのタイプは、@ Entityで注釈が付けられたクラスまたはそのコレクション/配列である必要があります
このエラーは、BaseDaoを利用するDaoにそのデータ型の有効なクラスがないことを示しています。例 here このコードでは、DataDaoは、使用されるクラスdatatypeが、@ Entityタグを含むData.ktクラスによって定義される「Data」タイプ(DataDao.ktの行23)であることを定義しています(Data.ktの22行目)。
したがって、このエラーが発生した場合、エラーはBaseDaoインターフェースではなく、BaseDaoを使用しているDaoに起因しています。
これが役に立てば幸いです!