web-dev-qa-db-ja.com

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

Room Persistenceライブラリを介して、データベースをAndroidアプリに追加しようとしています。手順を正しく実行しましたが、コンパイル時に上記のエラーが発生します。さらに、Roomはgetterを見つけられません。私はコードでそれらのすべてを明確に見ることができますが、どんな助けでも大歓迎です。

エンティティの私のコードは次のとおりです。

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

そして、私が得るエラー:

エラー:(14、8)エラー:エンティティとPojoには、使用可能なパブリックコンストラクターが必要です。空のコンストラクターまたはパラメーターがフィールドに一致するコンストラクター(名前とタイプ)を持つことができます。次のコンストラクターを試しましたが、一致しませんでした:User(Java.lang.String、Java.lang.String、Java.lang.String、Java.lang.String):[id:null、username:null、email:null、パスワード:null]

これも:

エラー:(53、20)エラー:フィールドのゲッターが見つかりません。エラー:(56、20)エラー:フィールドのゲッターが見つかりません。エラー:(60、20)エラー:フィールドのゲッターが見つかりません。エラー:(63、20)エラー:フィールドのゲッターが見つかりません。

11
v4570

私はここに答えを投稿しています:

CommonsWareとrmlanが提案した最初の質問では、コンストラクターのパラメーター名を変数のパラメーター名と一致するように変更することでした。

ゲッターの問題は、Roomが名前にJavaBeans規則を使用しているため、たとえばgetuUsername()がgetUUsername()である必要があることです。ビルドが成功したことに合わせてすべてのゲッターを変更した後。ソース: Android Developers および JavaBeans Conventions

9
v4570

これを試して:-

@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