#android #datetimepicker #android-room
#Android #datetimepicker #android-комната
Вопрос:
У меня есть этот код для базы данных room…
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
. Как мне использовать преобразователь типов для этого пользовательского класса? Я взял пользовательский класс из https://github.com/florent37/SingleDateAndTimePicker
Ответ №1:
SingleDateAndTimePicker
это представление, а не фрагмент данных. Следовательно, вы не хотите использовать это как свойство на ShiftLog
, но вместо этого будете использовать Date
то, что пользователь выбрал бы с помощью SingleDateAndTimePicker
@Entity
public class ShiftLog {
...
@ColumnInfo(name = "shift_start")
private Date shiftStart;
...
Дата будет взята из SingleDateAndTimePickerDialog.Listener
(подробности см. в разделе «Использование» в README этой библиотеки).
Вам все равно понадобится TypeConverter
для Date
объекта, поскольку это считается сложными данными. Вот руководство о том, как это сделать. В качестве бонуса, пример, который они используют в этом руководстве, предназначен для Date
класса!
Ответ №2:
SingleDateAndTimePicker — это компонент пользовательского интерфейса, вы не должны сохранять его в своей базе данных.
Это пример из репозитория SingleDateAndTimePicker
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 смотрите официальную документацию