web-dev-qa-db-fra.com

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

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.

11
v4570

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

9
v4570

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