web-dev-qa-db-ja.com

ルームの永続性:エンティティとPojoには、使用可能なパブリックコンストラクターが必要です

Room Persistenceライブラリを介してAndroidアプリにデータベースを追加しようとしていますが、このエラーが発生しています:

エラー:エンティティとPojoには、使用可能なパブリックコンストラクターが必要です。空のコンストラクターまたはパラメーターがフィールドに一致するコンストラクター(名前とタイプ)を持つことができます。次のコンストラクターを試しましたが、一致しませんでした:User(int、Java.lang.String、Java.lang.String、int、int、int、Java.lang.String)-> [param:id-> matched field:unmatched 、param:name->一致したフィールド:unmatched、param:gender->一致したフィールド:unmatched、param:age->一致したフィールド:unmatched、param:weight->一致したフィールド:unmatched、param:height->一致したフィールド:unmatched 、param:workout->一致したフィールド:unmatched]

ここに私のコードがあります:

    @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;

} ...

誰かが私が間違っていることや逃したことを教えてもらえますか?

6
ajonk

エンティティー属性と一致するようにパラメーターの名前を変更してください。

  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;
  } ...

永続化のために、RoomでJavaBeans規則を使用します。詳細: https://developer.Android.com/training/data-storage/room/defining-data#Java

6
Pradip Karki

また、これを試すことができます:

@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

空のコンストラクタを追加するだけで、この同じ問題を回避できました。 public User(){}

0
Teri Beckham

私もこのエラーを受け取りました。コンストラクターの属性の1つだけが一致しなかったため、かなり混乱していました。私の変数(コンストラクター外)の名前はmURLで、コンストラクター内のURLと一致させようとしました。

代わりに、外部変数をmUrlに設定する必要がありました。はい、最後の2文字を大文字にすると、そのエラーが発生しました。設定this.mUrl = url の代わりに this.mURL = urlはエラーを解決しました。

0
George