0

宿題プランナー アプリケーションにブート レシーバーがあり、ユーザーに宿題の期限が迫っていることを知らせるために作成されたすべてのアラームをリセットします。電話が起動するたびに、「宿題プランナーが停止しました」というメッセージが表示され、理解できません。なぜだ。また、起動時に接続していないため、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);

}
}

長いコード スニペットで申し訳ありませんが、何が問題なのかわかりません。

ありがとう

編集: エラーの原因は、インテントを作成し、PendingIntent からコンテキストを取得するときです。

Intent i = new Intent(HomeworkList.getAppContext(), RegularAlarm.class);

この行により、ヌル ポインター例外が発生します。理由はありますか?

4

0 に答える 0