2014-12-11 2 views
1

Я нашел странную для меня ошибку в приложении. Когда я открываю календарь (диалоговое окно), я могу установить дату. Проблема заключается в том, когда я пытаюсь открыть второй раз (открыт -> близко -> открыть) аварии приложения и Logcat показать эту ошибкуВо второй попытке открыть календарь сбой приложения

12-11 12:30:22.430: E/AndroidRuntime(1023): FATAL EXCEPTION: main 
12-11 12:30:22.430: E/AndroidRuntime(1023): Process: com.res, PID: 1023 
12-11 12:30:22.430: E/AndroidRuntime(1023): java.lang.NullPointerException 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at com.res.CustomDateTimePicker.showDialog(CustomDateTimePicker.java:149) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at com.res.Reserv$2.onClick(Res.java:75) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at android.view.View.performClick(View.java:4438) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at android.view.View$PerformClick.run(View.java:18422) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at android.os.Handler.handleCallback(Handler.java:733) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at android.os.Looper.loop(Looper.java:136) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at java.lang.reflect.Method.invoke(Method.java:515) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
12-11 12:30:22.430: E/AndroidRuntime(1023):  at dalvik.system.NativeStart.main(Native Method) 

На CustomDateTimePicker.java:149 У меня есть этот selectedHour = calendar_date.get(Calendar.HOUR_OF_DAY);

public void showDialog() { 
if (!dialog.isShowing()) { 

    datePicker.setCalendarViewShown(false); 
    selectedHour = calendar_date.get(Calendar.HOUR_OF_DAY); 
    selectedMinute = calendar_date.get(Calendar.MINUTE); 

    timePicker.setIs24HourView(is24HourView); 
    timePicker.setCurrentHour(selectedHour); 
    timePicker.setCurrentMinute(selectedMinute); 

    datePicker.setMinDate(System.currentTimeMillis() + 345600000); 

    datePicker.updateDate(calendar_date.get(Calendar.YEAR), 
      calendar_date.get(Calendar.MONTH), 
      calendar_date.get(Calendar.DATE)); 

    dialog.show(); 

    btn_setDate.performClick(); 
} 
} 

В разрешении .java: 75 это custom.showDialog();

findViewById(R.id.btnCalendar).setOnClickListener(
      new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        custom.showDialog(); 
       } 

Что может быть проблема? UPDATE

custom = new CustomDateTimePicker(this, 
      new CustomDateTimePicker.ICustomDateTimeListener() { 

       @Override 
       public void onSet(Dialog dialog, Calendar calendarSelected, 
         Date dateSelected, int year, String monthFullName, 
         String monthShortName, int monthNumber, int date, 
         String weekDayFullName, String weekDayShortName, 
         int hour24, int hour12, int min, int sec, 
         String AM_PM) { 
        ((EditText) findViewById(R.id.datePicker)).setText(calendarSelected.get(Calendar.DAY_OF_MONTH) 
            + "-" + (monthNumber+1) + "-" + year 
            + " " + hour24 + ":" + min);    
       } 

       @Override 
       public void onCancel() { 

       } 
      }); 

    /** 
    * Pass Directly current time format it will return AM and PM if you set 
    * false 
    */ 
    custom.set24HourFormat(false); 
    /** 
    * Pass Directly current data and time to show when it pop up 
    */ 
    custom.setDate(Calendar.getInstance()); 

    findViewById(R.id.btnCalendar).setOnClickListener(
      new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        custom.showDialog(); 
       } 
+0

Где вы создаете экземпляр 'calendar_date'? Вы можете показать соответствующий раздел кода? Вы можете быть уверены, что после закрытия диалогового окна он станет «нулевым». – nem035

+0

Обновлен мой вопрос. Вы об этом говорите? – Goro

+0

не совсем. Где вы говорите «Календарь calendar_date = new ...»? – nem035

ответ

2

Вы проблема, кажется, что calendar_date становится null после закрытия диалогового окна или calendar_date инициализируется null и никогда не изменял.

На основе кода, который вы опубликовали в комментариях, функция showDialog() здесь и в pastebin не то же самое.

В коде в Pastebin вы делаете чек, который отсутствует из этого кода, и именно поэтому вы получаете NullPointerException:

if (calendar_date == null) 
    calendar_date = Calendar.getInstance(); 

Добавление кода выше должен решить вашу проблему.

+0

Решено. Еще раз спасибо! – Goro

+0

@Goro не проблема, рад помочь – nem035

Смежные вопросы