web-dev-qa-db-fra.com

Persistance de la pièce: les entités et les Pojos doivent avoir un constructeur public utilisable

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é?

6
ajonk

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

6
Pradip Karki

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;
 }
1
Nathani Software

J'ai contourné ce même problème en ajoutant simplement un constructeur vide. public User(){}

0
Teri Beckham

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.

0
George