J'essaie d'ajouter une base de données à mon Android via la bibliothèque Room Persistence et j'obtiens cette erreur:
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 (int, Java.lang.String, Java.lang.String, int, int, int, Java.lang.String) -> [param: id -> champ correspondant: inégalé , param: nom -> champ correspondant: sans correspondance, param: sexe -> champ correspondant: sans correspondance, param: âge -> champ correspondant: sans correspondance, param: poids -> champ correspondant: sans correspondance, param: hauteur -> champ correspondant: sans correspondance , param: entraînement -> champ correspondant: inégalé]
Voici mon code:
@Entity
public class User {
@PrimaryKey
private int userId;
private String userName;
private String userGender;
private int userAge;
private int userWeight;
private int userHeight;
private String workoutPlan;
public User(int id, String name, String gender, int age, int weight, int height, String workout) {
this.userId = id;
this.userName = name;
this.userGender = gender;
this.userAge = age;
this.userWeight = weight;
this.userHeight = height;
this.workoutPlan = workout;
} ...
Quelqu'un peut-il me dire ce que je fais mal ou ce que j'ai raté?
Veuillez modifier les noms des paramètres de manière à ce qu'ils correspondent aux attributs d'entité.
public User(int userId, String userName, String userGender, int userAge, int userWeight, int userHeight, String workoutPlan) {
this.userId = userId;
this.userName = userName;
this.userGender = userGender;
this.userAge = userAge;
this.userWeight = userWeight;
this.userHeight = userHeight;
this.workoutPlan = workoutPlan;
} ...
Pour plus de persistance, il utilise les conventions JavaBeans dans Room. Pour plus d'informations: https://developer.Android.com/training/data-storage/room/defining-data#Java
vous pouvez également essayer ceci: -
@Ignore
public User(int userId, String userName, String userGender, int userAge, int
userWeight, int userHeight, String workoutPlan ) {
this.userId = userId;
this.userName = userName;
this.userGender = userGender;
this.userAge = userAge;
this.userWeight = userWeight;
this.userHeight = userHeight;
this.workoutPlan = workoutPlan;
}
public User(String userName, String userGender, int userAge, int
userWeight, int userHeight, String workoutPlan) {
this.userName = userName;
this.userGender = userGender;
this.userAge = userAge;
this.userWeight = userWeight;
this.userHeight = userHeight;
this.workoutPlan = workoutPlan;
}
J'ai contourné ce même problème en ajoutant simplement un constructeur vide. public User(){}
J'ai aussi eu cette erreur. Un seul de mes attributs dans mon constructeur ne correspondait pas et je le trouvais plutôt déroutant. Ma variable (en dehors du constructeur) s'appelait mURL et j'essayais de la faire correspondre à l'URL dans le constructeur.
Au lieu de cela, j'aurais dû définir la variable externe sur mUrl. Oui, la mise en majuscule des 2 dernières lettres m'a donné cette erreur. Réglage this.mUrl = url
au lieu de this.mURL = url
a résolu l'erreur.