Получение исключения NullPointerException при попытке вызвать метод ShowDialog() при нажатии кнопки

#android #dialog #nullpointerexception

#Android #диалоговое окно #исключение nullpointerexception

Вопрос:

Я пытаюсь показывать пользовательский диалог всякий раз, когда кнопка нажата в определенном представлении. Однако я получаю ошибку принудительного закрытия всякий раз, когда пытаюсь переключиться на представление, содержащее кнопку. LogCat выдает мне исключение NullPointerException для метода, который я использую для настройки прослушивателя, однако я не уверен, что есть ошибка. Я думаю, что это может быть код диалога, но я написал его в спецификации сайта разработчиков Android.

Вот метод с прослушивателем кнопок:

 //Registers the listeners for the various buttons in the edit view
private void registerButtonListenersAndSetDefaultText() { 

    mTimeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(TIME_PICKER_DIALOG);
        }
    });
    updateTimeButtonText();

    mDayButton.setOnClickListener(new View.OnClickListener() { //here is where
                                                                       //the error is 
                                                                      //being thrown.

        public void onClick(View v) {
            showDialog(DAY_CHECKBOX_DIALOG);
        }
    }); 
    }
  

Вот метод onCreateDialog():

 @Override
protected Dialog onCreateDialog(int id) { 
    Dialog dialog = new Dialog(this);
    switch(id) { 
    case TIME_PICKER_DIALOG:
        showTimePicker();
    case DAY_CHECKBOX_DIALOG:
        showDayPicker();

    }
    return onCreateDialog(id);
}
  

Вот метод showDayPicker() (тот, который, я думаю, может вызывать проблему):

 private Dialog showDayPicker() {
    Dialog dialog = new Dialog(ScheduleEditActivity.this);
    dialog.setContentView(R.layout.day_picker_dialog);
    dialog.setTitle("Choose A Day");
    return dialog;
}
  

И вот LogCat:

     10-19 20:23:57.191: ERROR/AndroidRuntime(293): FATAL EXCEPTION: main
    10-19 20:23:57.191: ERROR/AndroidRuntime(293): java.lang.RuntimeException: Unable to start activity ComponentInfo{vt.nhw.android.easyringertoggle/vt.nhw.android.easyringertoggle.ScheduleEditActivity}: java.lang.NullPointerException
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.os.Handler.dispatchMessage(Handler.java:99)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.os.Looper.loop(Looper.java:123)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at java.lang.reflect.Method.invokeNative(Native Method)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at java.lang.reflect.Method.invoke(Method.java:521)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at dalvik.system.NativeStart.main(Native Method)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293): Caused by: java.lang.NullPointerException
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at vt.nhw.android.easyringertoggle.ScheduleEditActivity.registerButtonListenersAndSetDefaultText(ScheduleEditActivity.java:52)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at vt.nhw.android.easyringertoggle.ScheduleEditActivity.onCreate(ScheduleEditActivity.java:39)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    10-19 20:23:57.191: ERROR/AndroidRuntime(293):     ... 11 more
  

PS Я уже публиковал этот вопрос раньше, но фактическое тело вопроса было запутанным, поэтому я удалил и перепечатал. Спасибо за вашу помощь!

Комментарии:

1. Вы уверены mTimeButton и mDayButton ссылаетесь на Button ? Ваша проблема включена onCreate , а не showDialog .

2. Ошибка возникает в строке 32. если вы дважды щелкните по ошибке logcat, которая сообщает вам об этом в vt.nhw.android.easyringertoggle. ScheduleEditActivity.registerButtonListenersAndSetDefaultText(ScheduleEditActivity.java:52) приведет вас к ошибке

3. Трудно сказать, не видя номера строк в коде. Трассировка стека указывает на строку 52 из ScheduleEditActivity.java

Ответ №1:

Как вы получаете ссылку на эти объекты? что-то вроде этого?

 mTimeButton = (Button)findViewById(R.id.timeBtn);
  

Если да, то когда вы это делаете? Если представление не отображается на экране во время выполнения вызова findViewById(), оно вернет вам значение null.

Опубликуйте свой метод onCreate, и вам будет легче понять, что происходит.

Редактировать: также добавьте комментарий к строке, в которой генерируется исключение. Поскольку мы не можем определить, какой из них равен 52.

Комментарии:

1. Я ссылаюсь на объекты mTimeButton и mDayButton в формате: mTimeButton = (Button)findViewById(R.id.time_button) и я делаю это в методе onCreate() действия.

2. Я только что понял, кажется, что я неправильно сформировал ссылку на кнопку в методе onCreate(). Спасибо за помощь по такой тривиальной проблеме.