是否可以在新的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必須有一個可用的公共構造函數。你可以有一個空的構造函數或者一個構造函數,它們的參數匹配字段(按名稱和類型)。'
更新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' setter,或者提供一個'public'構造函數來匹配你的'@ Query'列。否則,Room無法爲您提供數據。你唯一的構造函數是零參數。 – CommonsWare