Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 引导接收器导致应用程序停止_Java_Android_Boot_Forceclose - Fatal编程技术网

Java 引导接收器导致应用程序停止

Java 引导接收器导致应用程序停止,java,android,boot,forceclose,Java,Android,Boot,Forceclose,我的家庭作业计划器应用程序中有一个引导接收器,用于重新设置所有警报,这些警报用于提醒用户他们的家庭作业即将到期。每次我的手机开机时,我都会收到“家庭作业计划器停止了”,我不知道为什么。我不能使用LogCat,因为它在启动时没有连接(?) 这是我在引导接收器中的代码 public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent)

我的家庭作业计划器应用程序中有一个引导接收器,用于重新设置所有警报,这些警报用于提醒用户他们的家庭作业即将到期。每次我的手机开机时,我都会收到“家庭作业计划器停止了”,我不知道为什么。我不能使用LogCat,因为它在启动时没有连接(?)

这是我在引导接收器中的代码

public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    // RE-SET ALL ALARMS FROM THE DATABASE WHEN PHONE IS TURNED ON

    HomeworkDatabase db = new HomeworkDatabase(context);
    db.open();
    ArrayList<HomeworkItem> hwks = db.getHomeworks();
    db.close();

    int reminders = 0;

    for (int e = 0; e < hwks.size(); e++) {

        HomeworkItem current = hwks.get(e);

        {
            Calendar c = Calendar.getInstance();
            c.set(current.year, current.month, current.day, 0, 0);

            long alarmTime = c.getTimeInMillis();

            Intent i = new Intent(HomeworkList.getAppContext(),
                    RegularAlarm.class);
            i.putExtra("title", current.title);
            i.putExtra("id", current.id);
            PendingIntent pi = PendingIntent.getBroadcast(
                    HomeworkList.getAppContext(), (int) current.id, i, 0);
            AlarmManager mAlarm = (AlarmManager) context
                    .getApplicationContext().getSystemService(
                            Context.ALARM_SERVICE);
            mAlarm.set(AlarmManager.RTC_WAKEUP, alarmTime, pi);

            reminders++;
        }

        if (current.oneDayReminder == true) {

            Calendar c = Calendar.getInstance();
            c.set(current.year, current.month, current.day, 0, 0);
            c.roll(Calendar.DAY_OF_MONTH, -1);

            long alarmTime = c.getTimeInMillis();

            Intent i = new Intent(HomeworkList.getAppContext(),
                    OneDayAlarm.class);
            i.putExtra("title", current.title);
            i.putExtra("id", current.id);
            PendingIntent pi = PendingIntent.getBroadcast(
                    HomeworkList.getAppContext(), (int) current.id, i, 0);
            AlarmManager mAlarm = (AlarmManager) context
                    .getApplicationContext().getSystemService(
                            Context.ALARM_SERVICE);
            mAlarm.set(AlarmManager.RTC_WAKEUP, alarmTime, pi);

            reminders++;

        }
        if (current.twoDayReminder == true) {
            Calendar c = Calendar.getInstance();
            c.set(current.year, current.month, current.day, 0, 0);
            c.roll(Calendar.DAY_OF_MONTH, -2);

            long alarmTime = c.getTimeInMillis();

            Intent i = new Intent(HomeworkList.getAppContext(),
                    TwoDaysAlarm.class);
            i.putExtra("title", current.title);
            i.putExtra("id", current.id);
            PendingIntent pi = PendingIntent.getBroadcast(
                    HomeworkList.getAppContext(), (int) current.id, i, 0);
            AlarmManager mAlarm = (AlarmManager) context
                    .getApplicationContext().getSystemService(
                            Context.ALARM_SERVICE);
            mAlarm.set(AlarmManager.RTC_WAKEUP, alarmTime, pi);

            reminders++;
        }
    }

    Log.d("hwk","BOOT COMPLETE: " + reminders + " alarms created");
    Toast.makeText(context, reminders + " alarms created at boot", Toast.LENGTH_LONG);

}
}

此行导致空指针异常。知道为什么吗?

添加
null
检查
hwks
。如果要测试代码,请将代码放在其他
活动中
并连接到调试器。如果没有LogCAT,为了获得<代码>错误,代码就不能说多了,但是你必须考虑在一个单独的线程中进行DB调用。onReceive()必须快速运行,如果你在这个方法中有很多事情要做,你应该启动一个服务并在那里完成你的工作。啊,好的,那么我应该使用引导接收器打开一个单独的活动来进行所有的DB调用吗?@TomRichardson:不,它不一定是相同的。取消报警使用
Intent.filterEquals(Intent other)
方法匹配
意图
-这不会比较用于创建原始报警的
上下文。请参阅文档中的
过滤器相等(…)
@Squonk非常感谢您提供此信息!我现在就去试一试。
Intent i = new Intent(HomeworkList.getAppContext(), RegularAlarm.class);