Когда вы вызываете show в диалоговом окне, это диалоговое окно просто отображается, и невозможно узнать, каким будет выбранное значение, пока пользователь не выберет его. Вот почему у них есть обратные вызовы, его код будет выполняться асинхронно, и обратный вызов будет выполняться, когда есть значение. Таким образом, ваша вставка находится не в том месте, так как эти значения еще не установлены.
Я бы создал метод со вставкой:
private void saveGroceryDate() {
ContentValues cv = new ContentValues();
cv.put(GroceryContract.GroceryEntry.COLUMN_DATE, dateString);
cv.put(GroceryContract.GroceryEntry.COLUMN_TIME, timeString);
mDatabase.insert(GroceryContract.GroceryEntry.TABLE_NAME, null, cv);
mAdapter.swapCursor(getAllItems());
}
, а другой - с помощью выбора времени:
private void selectGroceryTime() {
//CREATES THE TIMEPICKER DIALOG
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timeString = hourOfDay + ":" + minute;
saveGroceryDate();
}
}, HOUR, MINUTE, true);
}
Чтобы после выбора даты (обратный вызов DatePicker был выполнен), я бы вызвал метод selectGroceryTime () для выбора времени:
//CREATES THE DATEPICKER DIALOG
DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
dateString = year + " " + month + " " + dayOfMonth;
selectGroceryTime();
}
}, YEAR, MONTH, DATE);
И после того, как время выбрано (в обратный вызов TimePicker) Я бы сохранил все данные в базе данных, вызвав saveGroceryDate()
, так как в этот момент все данные будут в экземпляре vars.
И имейте в виду, что пользователь может отменить оба диалога, поэтому проверьте, что ваш код ведет себя так, как вы хотите в этом случае. Это может быть важно, если эти данные являются обязательными.