日期对话框获取12月份的forceclose

时间:2013-01-11 13:07:01

标签: java android datepicker forceclose

当我点击Dialog时,它会获得Forceclose。工作到11月为止。但是当我选择12月时,它会被强制关闭。请看代码。

  // ---------------- 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;
    }

1 个答案:

答案 0 :(得分:1)

在仔细观察粘贴在问题中的代码后,这是你犯的错误。

onCreateDialog()的第一个if循环中,您将获得此格式的日期12/31/1986。你把月份当作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)));
        }

希望它适合你。