0

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

1 に答える 1

1

質問に貼り付けられたコードを徹底的に観察した後、それはあなたが犯した間違いでした。

最初のifループではonCreateDialog()、この形式の日付を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)));
        }

それがあなたのために働くことを願っています。

于 2013-01-11T13:29:55.960 に答える