在 Room 数据库中使用 SingleDateAndTimePicker

Use SingleDateAndTimePicker in Room database

我有房间数据库的代码...

ShiftLog.java

@Entity
public class ShiftLog {
    @PrimaryKey
    @ColumnInfo(name = "user_uid")
    private int userUid;

    @ColumnInfo(name = "shift_start")
    private SingleDateAndTimePicker shiftStart;

    @ColumnInfo(name = "shift_end")
    private SingleDateAndTimePicker shiftEnd;

但是,我收到错误 Cannot figure out how to save this field into database. You can consider adding a type converter for it。如何为这个自定义 class 使用类型转换器?我从 https://github.com/florent37/SingleDateAndTimePicker

中获取了自定义 class

SingleDateAndTimePicker 是一个 UI 组件,您不要将其保存在您的数据库中。

这是来自 SingleDateAndTimePicker repository

的样本
new SingleDateAndTimePickerDialog.Builder(context)
        //.bottomSheet()
        //.curved()
        //.minutesStep(15)
        //.displayHours(false)
        //.displayMinutes(false)
        //.todayText("aujourd'hui")
        .displayListener(new SingleDateAndTimePickerDialog.DisplayListener() {
                            @Override
                            public void onDisplayed(SingleDateAndTimePicker picker) {
                                 //retrieve the SingleDateAndTimePicker
                            }
                        })

        .title("Simple")
        .listener(new SingleDateAndTimePickerDialog.Listener() {
            @Override
            public void onDateSelected(Date date) {

            }
        }).display();

您可以使用侦听器检索 Date 对象并将其保存到您的数据库,而不是 SingleDateAndTimePicker

要使用 Room 管理日期属性,请参阅 official documentation

SingleDateAndTimePicker是视图,不是数据。因此,您不想将其用作 ShiftLog 上的 属性,而是使用用户会选择使用 SingleDateAndTimePicker

Date ]
@Entity
public class ShiftLog {
    ...

    @ColumnInfo(name = "shift_start")
    private Date shiftStart;

   ...

日期来自 SingleDateAndTimePickerDialog.Listener(有关详细信息,请参阅该库自述文件中的 "Usage" 部分)。

您仍然需要 TypeConverter 作为 Date 对象,因为这被认为是复杂的数据。 Here 是关于如何做到这一点的教程。作为奖励,他们在该教程中使用的示例是 Date class!