Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “日期”对话框在12月份关闭_Java_Android_Datepicker_Forceclose - Fatal编程技术网

Java “日期”对话框在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

当我点击对话框时,它会自动关闭。天气晴朗到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;
    }

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

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。你知道吗?