java - 第二次尝试打开日历应用程序崩溃

标签 java android

我在应用程序中发现了一些对我来说很奇怪的错误。当我打开日历(对话框窗口)时,我可以设置日期。问题是当我第二次尝试打开时(打开 -> 关闭 -> 打开)应用程序崩溃并且 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();
}
}

在 res.java:75 中是这个 custom.showDialog();

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

                @Override
                public void onClick(View v) {

                    custom.showDialog();
                }

这里可能是什么问题? 更新

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

最佳答案

您的问题似乎是 calendar_date 在您关闭对话框后变为 null 或者 calendar_date 被初始化为 null 并且从未改变。

根据您在评论中发布的代码,此处的 showDialog() 函数与 pastebin 中的函数不同。

在 pastebin 的代码中,您进行了此代码中缺少的检查,这就是为什么您得到 NullPointerException 的原因。 :

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

添加上面的代码应该可以解决您的问题。

关于java - 第二次尝试打开日历应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429033/

相关文章:

java - 哪个类是所有类的父类(super class)

java - 从词性标签数组中查找 "subject"

java - 将 3rd 方库与 Maven 构建集成

java - 单选按钮 If 语句

android - 将 Xamarin Forms View 呈现为 Android View 而不指定大小

java - java 编译器如何处理 <E> 之外类型的缺失类型参数,例如 <E extends Foo>

java - spring @Cacheable 继承

java - 伏地魔 setMaxThreads 用法

android - 为什么即使 session 中不存在 SESSION,openfire 的用户仍保持在线状态

java - Android - 获取其他布局小部件