新しいAndroidアーキテクチャコンポーネントとルームパーシスタンスライブラリでエンティティクラスの埋め込みフィールドとしてEnumタイプを使用できますか? (組み込み列挙型を持つ)Androidアーキテクチャのコンポーネント:列挙型の使用
マイエンティティ:
@Entity(tableName = "tasks")
public class Task extends SyncEntity {
@PrimaryKey(autoGenerate = true)
String taskId;
String title;
/** Status of the given task.
* Enumerated Values: 0 (Active), 1 (Inactive), 2 (Completed)
*/
@Embedded
Status status;
@TypeConverters(DateConverter.class)
Date startDate;
@TypeConverters(StatusConverter.class)
public enum Status {
ACTIVE(0),
INACTIVE(1),
COMPLETED(2);
private int code;
Status(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
}
私のTypeConverter:私はこれをコンパイルすると
public class StatusConverter {
@TypeConverter
public static Task.Status toStatus(int status) {
if (status == ACTIVE.getCode()) {
return ACTIVE;
} else if (status == INACTIVE.getCode()) {
return INACTIVE;
} else if (status == COMPLETED.getCode()) {
return COMPLETED;
} else {
throw new IllegalArgumentException("Could not recognize status");
}
}
@TypeConverter
public static Integer toInteger(Task.Status status) {
return status.getCode();
}
}
は、私が言ってエラーを取得する「エラー:(52、12)エラー:エンティティとPojosには、使用可能なpublicコンストラクタが必要です。空のコンストラクタ、または(名前と型によって)フィールドに一致するパラメータを持つコンストラクタを持つことができます。
アップデート1 マイSyncEntityクラス:
/** * 同期されているすべてのルーム実体の基底クラスです。 */
@Entity
public class SyncEntity {
@ColumnInfo(name = "created_at")
Long createdAt;
@ColumnInfo(name = "updated_at")
Long updatedAt;
}
はSyncEntity'は、任意のコンストラクタを定義し 'ていますか? – CommonsWare
いいえ、そうではありません。 SyncEntity.classの問題を更新しました。 – Bohsen
フィールドを 'public'にしたり、' public'セッターを提供したり、 '@ Query'カラムと一致する' public'コンストラクタを提供する必要があると思います。それ以外の場合は、ルームでデータを提供することはできません。あなたの唯一のコンストラクタはゼロ引数のコンストラクタです。 – CommonsWare