【问题标题】:Date dialog Gets forceclose when it comes to December month日期对话框在 12 月时强制关闭
【发布时间】:2013-01-11 13:07:00
【问题描述】:

当我单击对话框时,它会强制关闭。工作正常,直到 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;
    }

【问题讨论】:

  • 尝试使用注释行。即“返回新的 DatePickerDialog(ProfileSetting.this, mDateSetListener, cyear, cmonth-1, cday);"。
  • 发布异常堆栈,但原因可能是日历使用 0 -11 作为月份,但 DatePickerDialog 使用 0 -11 或 1-12,具体取决于区域设置
  • @Raj 我已经使用了该注释行。但问题是一样的。所以我从月份中删除了-1。但没有解决办法。
  • E/AndroidRuntime(7680): FATAL EXCEPTION: main E/AndroidRuntime(7680): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.Etl/com.android.More. ProfileSetting}:java.lang.NullPointerException E/AndroidRuntime(7680):原因:java.lang.NullPointerException E/AndroidRuntime(7680):在 com.android.More.ProfileSetting.setAllDatailView(ProfileSetting.java:437) E/AndroidRuntime (7680): 在 com.android.More.ProfileSetting.onCreate(ProfileSetting.java:233)

标签: java android datepicker forceclose


【解决方案1】:

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

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

希望它对你有用。

【讨论】:

  • 不考虑 if 条件。我已经调试了代码错误在 else 部分。如果条件从服务器获取日期。而其他部分在日期对话框中打印当前日期。所以当我在一月份调试时,cmonth 的值为 0。
  • @RonakPandya Calendar 实例将返回 1 月的值 0 和 12 月的值 11。你知道吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多