J'essaie d'ajouter une base de données à mon Android via la bibliothèque Room Persistence. J'ai suivi correctement les instructions, mais lors de la compilation, obtenez l'erreur ci-dessus. De plus, Room ne trouve pas mes getters, bien que je puisse les voir clairement dans mon code. Toute aide serait très appréciée. Merci d'avance.
Voici mon code pour l'entité:
@Entity(tableName = "users", indices = @Index(value = "username", unique = true))
public class User {
@NonNull
public String getuId() {
return uId;
}
public void setuId(@NonNull String uId) {
this.uId = uId;
}
public String getuUsername() {
return uUsername;
}
public void setuUsername(String uUsername) {
this.uUsername = uUsername;
}
@NonNull
public String getuPassword() {
return uPassword;
}
public void setuPassword(@NonNull String uPassword) {
this.uPassword = uPassword;
}
public String getuEmail() {
return uEmail;
}
public void setuEmail(String uEmail) {
this.uEmail = uEmail;
}
@NonNull
@PrimaryKey
@ColumnInfo(name = "user_id")
private String uId;
@ColumnInfo(name = "username")
private String uUsername;
@NonNull
@ColumnInfo(name = "password")
private String uPassword;
@ColumnInfo(name = "email")
private String uEmail;
@Ignore
public User(String userName, String email, String password){
uId = UUID.randomUUID().toString();
uUsername = userName;
uEmail = email;
uPassword = password;
}
public User(@NonNull String id, String username, String email,@NonNull String password){
this.uId = id;
this.uUsername = username;
this.uPassword = password;
this.uEmail = email;
}
}
Et l'erreur que j'obtiens:
Erreur: (14, 8) erreur: les entités et les Pojos doivent 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). J'ai essayé les constructeurs suivants mais ils n'ont pas pu correspondre: Utilisateur (Java.lang.String, Java.lang.String, Java.lang.String, Java.lang.String): [id: null, nom d'utilisateur: null, email: null, mot de passe: null]
Aussi ceci:
Erreur: (53, 20) erreur: impossible de trouver le getter pour le champ. Erreur: (56, 20) erreur: impossible de trouver le getter pour le champ. Erreur: (60, 20) erreur: impossible de trouver le getter pour le champ. Erreur: (63, 20) erreur: impossible de trouver le getter pour le champ.
Je poste la réponse ici:
Pour ma première question, comme suggéré par CommonsWare et rmlan, était de changer les noms de paramètres dans mon constructeur pour correspondre à ceux des variables.
Le problème avec les getters était que Room utilise les conventions JavaBeans pour leurs noms, donc par exemple mon getuUsername () aurait plutôt dû être getUUsername (). Après avoir changé tous les getters pour qu'ils correspondent, la construction a réussi. Source: Développeurs Android et Conventions JavaBeans
essaye ça:-
@Ignore
public User(int uId, String uUsername, String uEmail, String
uPassword){
this.uId = uId;
this.uUsername = uUsername;
this.uEmail = uEmail;
this.uPassword = uPassword;
}
public User(String uUsername, String uEmail, String
uPassword){
this.uUsername = uUsername;
this.uEmail = uEmail;
this.uPassword = uPassword;
}