J'utilise un composant d'architecture de pièce pour la persistance. J'ai créé une interface DAO générique pour éviter le code passe-partout. Astuces Room Pro
Mais mon code ne compile pas en disant "Erreur: (21, 19) erreur: Le type du paramètre doit être une classe annotée avec @Entity ou une collection/tableau de celle-ci" pour la classe générique T.
interface BaseDao<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(T... entity);
@Update
void update(T entity);
@Delete
void delete(T entity);
}
@Dao
public abstract class ReasonDao implements BaseDao<ReasonDao> {
@Query("SELECT * from Reason")
abstract public List<Reason> getReasons();
}
Y a-t-il quelque chose qui me manque ici? Cela fonctionne comme ceci ici
J'avais initialement suivi la méthode utilisée dans Kotlin, mais cela donne l'erreur en code Java. Deux changements rapides résolus pour moi
S'il vous plaît trouver le code ci-dessous et maintenant il fonctionne correctement
@Dao
abstract class BaseDao<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract void insert(T entity);
@Update
abstract void update(T entity);
@Delete
abstract void delete(T entity);
}
@Dao
public abstract class ReasonDao extends BaseDao<Reason>{
@Query("SELECT * from Reason")
abstract public List<Reason> getReasons();
}
Je crois que vous avez manqué de donner l'annotation Entity
à la classe T. Par exemple, la classe Reason
devrait avoir @Entity
et le donner à la classe ReasonDao. Comme:
@Dao
public abstract class ReasonDao extends BaseDao<Reason>{}
La raison est que vous avez spécifiéReasonDaotype en tant que paramètre générique au lieu deReason.
Code d'origine:
@Dao
public abstract class ReasonDao implements BaseDao<ReasonDao> {
...
}
Code correct:
@Dao
public abstract class ReasonDao implements BaseDao<Reason> {
...
}
oùReasonest le type marqué par@Entityannotation.
En passant, cela est corrigé dans la réponse acceptée, mais n'est pas mentionné dans la liste des modifications :)
Dans mon cas, j'ai essayé de sauvegarder dans des objets DB non-Entity. Puis remplacé par la classe d'entité (contient @Entity(tableName = "your_table", indices = [Index("your_key")])
).