Est-il possible d'utiliser un type Enum comme champ incorporé dans une classe Entity avec les nouveaux composants d'architecture Android et la bibliothèque de persistance de la pièce?Composants de l'architecture Android: utilisation des énumérations
Mon entité (avec Enum embedded):
@Entity(tableName = "tasks")
public class Task extends SyncEntity {
@PrimaryKey(autoGenerate = true)
String taskId;
String title;
/** Status of the given task.
* Enumerated Values: 0 (Active), 1 (Inactive), 2 (Completed)
*/
@Embedded
Status status;
@TypeConverters(DateConverter.class)
Date startDate;
@TypeConverters(StatusConverter.class)
public enum Status {
ACTIVE(0),
INACTIVE(1),
COMPLETED(2);
private int code;
Status(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
}
Mon TypeConverter:
public class StatusConverter {
@TypeConverter
public static Task.Status toStatus(int status) {
if (status == ACTIVE.getCode()) {
return ACTIVE;
} else if (status == INACTIVE.getCode()) {
return INACTIVE;
} else if (status == COMPLETED.getCode()) {
return COMPLETED;
} else {
throw new IllegalArgumentException("Could not recognize status");
}
}
@TypeConverter
public static Integer toInteger(Task.Status status) {
return status.getCode();
}
}
Quand je compile ce je reçois une erreur disant « erreur: (52, 12) erreur: Entités et Pojos doit avoir un constructeur public utilisable. Vous pouvez avoir un constructeur vide ou un constructeur dont les paramètres correspondent aux champs (par nom et type). '
Mise à jour 1 Ma classe SyncEntity:
/** * classe de base pour toutes les entités de la chambre qui sont synchronisées. */
@Entity
public class SyncEntity {
@ColumnInfo(name = "created_at")
Long createdAt;
@ColumnInfo(name = "updated_at")
Long updatedAt;
}
Est-ce que 'SyncEntity' définissent les constructeurs? – CommonsWare
Non, ce n'est pas le cas. Problème mis à jour avec SyncEntity.class. – Bohsen
Je pense que vous devez soit rendre vos champs 'public', offrir des setters' public', ou offrir un constructeur 'public' qui correspond' vos colonnes '@ Query'. Sinon, Room ne peut pas vous fournir de données.Votre seul constructeur est le zéro argument. – CommonsWare