Java “日期”对话框在12月份关闭
当我点击对话框时,它会自动关闭。天气晴朗到11月。但当我选择12月的时候,它就离我很近了。请看代码Java “日期”对话框在12月份关闭,java,android,datepicker,forceclose,Java,Android,Datepicker,Forceclose,当我点击对话框时,它会自动关闭。天气晴朗到11月。但当我选择12月的时候,它就离我很近了。请看代码 // ---------------- For DatePicker ---------------- @Override protected Dialog onCreateDialog(int id) { if(date.toString().length() > 0) { //12/31/1986
// ---------------- For DatePicker ----------------
@Override
protected Dialog onCreateDialog(int id) {
if(date.toString().length() > 0)
{
//12/31/1986
cmonth =(Integer.parseInt(date.substring(0,2)));
cday =(Integer.parseInt(date.substring(3,5)));
cyear =(Integer.parseInt(date.substring(6,10)));
}
else
{
Calendar c = Calendar.getInstance();
cyear = c.get(Calendar.YEAR);
cmonth = c.get(Calendar.MONTH);
cday = c.get(Calendar.DAY_OF_MONTH);
}
switch (id) {
case DATE_DIALOG_ID:
//return new DatePickerDialog(ProfileSetting.this, mDateSetListener, cyear, cmonth-1, cday); //Gets forceclose when it comes to December month
return new DatePickerDialog(ProfileSetting.this, mDateSetListener, cyear, cmonth, cday); // works till November
}
return null;
}
在仔细观察粘贴在问题中的代码后,这是您犯的错误 在
onCreateDialog()
的第一个if循环中,您将获得1986年12月31日格式的日期。其中,您以12个月为一个月
在else循环中,您直接从Calendar实例中获取月份,它最多只能为您提供11个
所以,要在这两种情况下工作,您需要在第一个if循环中执行月递减
按如下所示更改您的if循环
if(date.toString().length() > 0)
{
//12/31/1986
cmonth =(Integer.parseInt(date.substring(0,2)));
cmonth--;
cday =(Integer.parseInt(date.substring(3,5)));
cyear =(Integer.parseInt(date.substring(6,10)));
}
希望它对您有用。尝试使用注释行。i、 e.“return new DatePickerDialog(ProfileSetting.this,mDateSetListener,cyear,cmonth-1,cday)”。请发布异常堆栈,但原因可能是日历使用0-11作为月份,而DatePickerDialog使用0-11或1-12,具体取决于Locale@Raj我已经用过那句话了。但问题是一样的。所以我从上个月删除了-1。但是没有解决方案。E/AndroidRuntime(7680):致命异常:主E/AndroidRuntime(7680):java.lang.RuntimeException:无法启动活动组件信息{com.android.Etl/com.android.More.ProfileSetting}:java.lang.NullPointerException E/AndroidRuntime(7680):原因:java.lang.NullPointerException E/AndroidRuntime(7680)在COM.Android。更多。PrraveSeTest.StErdDATAVIEW(PrrrExeSeTest.java:437)E/ANDROIDRunTime:(7680):在COM.Android。更多。PrrrExeStEndo.OnCuto(PrrreSePeave.java:233)不考虑条件。我已经调试代码,故障在另一部分。如果条件从服务器获得。而Else零件在“日期”对话框中打印当前日期。因此,当我在一月调试时,cmonth的值是0。@RonakPandya日历实例将一月值返回为0,十二月值返回为11。你知道吗?