Android 从ListView中删除最后一项会使应用程序崩溃

Android 从ListView中删除最后一项会使应用程序崩溃,android,listview,android-sqlite,Android,Listview,Android Sqlite,我正在创建一个闹钟,它有一个问题,每次我删除列表视图的最后一项时,我的应用程序就会崩溃,即使在谷歌搜索和敲打我的头之后,我也不知道如何修复 这是我的SQLitehelper代码 public int deleteAlarm(long id) { return getWritableDatabase().delete(Alarm.TABLE_NAME, Alarm._ID + " = ?", new String[] { String.valueOf(id)

我正在创建一个闹钟,它有一个问题,每次我删除列表视图的最后一项时,我的应用程序就会崩溃,即使在谷歌搜索和敲打我的头之后,我也不知道如何修复

这是我的SQLitehelper代码

    public int deleteAlarm(long id) {
    return getWritableDatabase().delete(Alarm.TABLE_NAME,
            Alarm._ID + " = ?", new String[] { String.valueOf(id) });
}
AlarmManagerHelper.setAlarms

public static void setAlarms(Context context) {
    cancelAlarms(context);
    AlarmDbHelper dbHelper = new AlarmDbHelper(context);
    List<AlarmModel> alarms = dbHelper.getAlarms();

    for (AlarmModel alarm : alarms) {
        if (alarm.isEnabled) {
            PendingIntent pIntent = createPendingIntent(context, alarm);

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, alarm.timeHour);
            calendar.set(Calendar.MINUTE, alarm.timeMinute);
            calendar.set(Calendar.SECOND, 00);

            final int nowDay = Calendar.getInstance().get(
                    Calendar.DAY_OF_WEEK);
            final int nowHour = Calendar.getInstance().get(
                    Calendar.HOUR_OF_DAY);
            final int nowMinute = Calendar.getInstance().get(
                    Calendar.MINUTE);
            boolean alarmSet = false;

            for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; ++dayOfWeek) {
                if (alarm.getRepeatingDay(dayOfWeek - 1)
                        && dayOfWeek >= nowDay
                        && !(dayOfWeek == nowDay && alarm.timeHour < nowHour)
                        && !(dayOfWeek == nowDay
                                && alarm.timeHour == nowHour && alarm.timeMinute <= nowMinute)) {
                    calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);

                    setAlarm(context, calendar, pIntent);
                    alarmSet = true;
                    break;
                }
            }

            if (!alarmSet) {
                for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; ++dayOfWeek) {
                    if (alarm.getRepeatingDay(dayOfWeek - 1)
                            && dayOfWeek <= nowDay && alarm.repeatWeekly) {
                        calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
                        calendar.add(Calendar.WEEK_OF_YEAR, 1);

                        setAlarm(context, calendar, pIntent);
                        alarmSet = true;
                        break;
                    }
                }
            }
        }
    }
}

如果行中有NullPointerException

用于(报警模型报警:报警){


然后,
alarms
必须是
null
。您应该在for循环之前执行null检查,或者确保
dbHelper.getAlarms()
始终返回非null列表,即使它是空的。

哪一行是第31行?for(AlarmModel alarm:alarms){我之前为(AlarmModel alarm:alarms)添加了这段代码。{如果(alarms==null){return;}还有一件事,你能帮我在使用时间选择器时改变列表行背景吗
05-24 02:47:33.640: E/AndroidRuntime(819): FATAL EXCEPTION: main
05-24 02:47:33.640: E/AndroidRuntime(819): Process: com.b.alarmclock, PID: 819
05-24 02:47:33.640: E/AndroidRuntime(819): java.lang.NullPointerException
05-24 02:47:33.640: E/AndroidRuntime(819):  at com.b.alarmclock.alarm.AlarmManagerHelper.setAlarms(AlarmManagerHelper.java:31)
05-24 02:47:33.640: E/AndroidRuntime(819):  at com.b.alarmclock.alarm.AlarmClock.deleteAlarm(AlarmClock.java:64)
05-24 02:47:33.640: E/AndroidRuntime(819):  at com.b.alarmclock.alarm.AlarmClock$AlarmListAdapter$2.onLongClick(AlarmClock.java:178)
05-24 02:47:33.640: E/AndroidRuntime(819):  at android.view.View.performLongClick(View.java:4474)
05-24 02:47:33.640: E/AndroidRuntime(819):  at android.view.View$CheckForLongPress.run(View.java:18401)
05-24 02:47:33.640: E/AndroidRuntime(819):  at android.os.Handler.handleCallback(Handler.java:733)
05-24 02:47:33.640: E/AndroidRuntime(819):  at android.os.Handler.dispatchMessage(Handler.java:95)
05-24 02:47:33.640: E/AndroidRuntime(819):  at android.os.Looper.loop(Looper.java:136)
05-24 02:47:33.640: E/AndroidRuntime(819):  at android.app.ActivityThread.main(ActivityThread.java:5017)
05-24 02:47:33.640: E/AndroidRuntime(819):  at java.lang.reflect.Method.invokeNative(Native Method)
05-24 02:47:33.640: E/AndroidRuntime(819):  at java.lang.reflect.Method.invoke(Method.java:515)
05-24 02:47:33.640: E/AndroidRuntime(819):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-24 02:47:33.640: E/AndroidRuntime(819):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-24 02:47:33.640: E/AndroidRuntime(819):  at dalvik.system.NativeStart.main(Native Method)