java.text.ParseException:无法解析的日期:timepickerdialog 的“”(偏移量为 0)错误
java.text.ParseException: Unparseable date: "" (at offset 0) error for timepickerdialog
嗨,这是我第一次开发基于 Android 的简单应用程序。我需要验证我的开始时间和结束时间,这意味着结束时间不能小于或等于开始时间。我正在使用 EditText 来提示时间选择器对话框。我试过这段代码,但它不起作用,在下面的行中出现上面的错误
Date endTimeDate = format.parse(inputEndTime.getText().toString());
这是 EditText 字段的 OnClickListener 的全部代码,用于提示时间选择器对话框。我什至试图反转 if-else 中的语句,但它对我也不起作用。任何人都可以帮助我。真的非常感谢!
inputEndTime.OnClickListener代码:
inputEndTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
int hour = myTime.get(Calendar.HOUR_OF_DAY);
int min = myTime.get(Calendar.MINUTE);
TimePickerDialog myEndTimePickerDialog = new TimePickerDialog(ViewDocActivity.this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute)
{
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
try
{
Date startTimeDate = format.parse(inputTime.getText().toString());
Date endTimeDate = format.parse(inputEndTime.getText().toString());
if (startTimeDate.compareTo(endTimeDate) <= 0)
{
Context timeContext = getApplicationContext();
CharSequence text = "Please enter the correct end time";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(timeContext, text, duration);
toast.show();
}
else
{
inputEndTime.setText(String.format("%02d:%02d", hourOfDay, minute));
}
}
catch(ParseException e)
{
e.printStackTrace();
}
}
}, hour, min, true);
myEndTimePickerDialog.setTitle("Select Time");
myEndTimePickerDialog.show();
}
});
我认为您必须先格式化字符串,然后再格式化为日期
也许 trim().
Date startTimeDate = format.parse(inputTime.getText().toString().trim());
Date endTimeDate = format.parse(inputEndTime.getText().toString().trim());
您出错的原因是,您正在尝试从 EditText (inputEndTime
) 解析时间,但在您执行 format.parse()
.[=17 时它是空的=]
设置时,您有一个 EditText 和一个 TimePickerDialog。现在您正在实施 TimePickerDialog.OnTimeSetListener#onTimeSet() 方法。在这里您可以获取时间,用户通过方法的 hourOfDay
和 minute
参数在对话框中选择。此时您有时间,但它还没有写入 EditText 字段本身。
因此,让代码正常工作的最简单解决方案是在进一步执行任何操作之前在 EditText 字段中设置该时间。为此,将以下行添加为 onTimeSet()
方法的第一行:
inputEndTime.setText(String.format("%02d:%02d", hourOfDay, minute));
这会将选择的时间设置为 EditText 字段中的文本,其格式可以稍后使用 format.parse(...)
进行解析。
嗨,这是我第一次开发基于 Android 的简单应用程序。我需要验证我的开始时间和结束时间,这意味着结束时间不能小于或等于开始时间。我正在使用 EditText 来提示时间选择器对话框。我试过这段代码,但它不起作用,在下面的行中出现上面的错误
Date endTimeDate = format.parse(inputEndTime.getText().toString());
这是 EditText 字段的 OnClickListener 的全部代码,用于提示时间选择器对话框。我什至试图反转 if-else 中的语句,但它对我也不起作用。任何人都可以帮助我。真的非常感谢!
inputEndTime.OnClickListener代码:
inputEndTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
int hour = myTime.get(Calendar.HOUR_OF_DAY);
int min = myTime.get(Calendar.MINUTE);
TimePickerDialog myEndTimePickerDialog = new TimePickerDialog(ViewDocActivity.this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute)
{
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
try
{
Date startTimeDate = format.parse(inputTime.getText().toString());
Date endTimeDate = format.parse(inputEndTime.getText().toString());
if (startTimeDate.compareTo(endTimeDate) <= 0)
{
Context timeContext = getApplicationContext();
CharSequence text = "Please enter the correct end time";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(timeContext, text, duration);
toast.show();
}
else
{
inputEndTime.setText(String.format("%02d:%02d", hourOfDay, minute));
}
}
catch(ParseException e)
{
e.printStackTrace();
}
}
}, hour, min, true);
myEndTimePickerDialog.setTitle("Select Time");
myEndTimePickerDialog.show();
}
});
我认为您必须先格式化字符串,然后再格式化为日期 也许 trim().
Date startTimeDate = format.parse(inputTime.getText().toString().trim());
Date endTimeDate = format.parse(inputEndTime.getText().toString().trim());
您出错的原因是,您正在尝试从 EditText (inputEndTime
) 解析时间,但在您执行 format.parse()
.[=17 时它是空的=]
设置时,您有一个 EditText 和一个 TimePickerDialog。现在您正在实施 TimePickerDialog.OnTimeSetListener#onTimeSet() 方法。在这里您可以获取时间,用户通过方法的 hourOfDay
和 minute
参数在对话框中选择。此时您有时间,但它还没有写入 EditText 字段本身。
因此,让代码正常工作的最简单解决方案是在进一步执行任何操作之前在 EditText 字段中设置该时间。为此,将以下行添加为 onTimeSet()
方法的第一行:
inputEndTime.setText(String.format("%02d:%02d", hourOfDay, minute));
这会将选择的时间设置为 EditText 字段中的文本,其格式可以稍后使用 format.parse(...)
进行解析。