Сериализуемый отправляет нулевой объект - PullRequest
1 голос
/ 06 января 2020

Это мой код для создания PendingIntent

 public PendingIntent checkAlarm(Context context, Alarm alarm) {
        Intent startAlarmArrival = new Intent(context,MyReceiver.class);
        Bundle b = new Bundle();
        b.putSerializable("SerialAlarm",alarm);
        startAlarmArrival.putExtra("CallingAlarm",b);
        return PendingIntent.getBroadcast(context,
                ALARM_ID,
                startAlarmArrival,
                PendingIntent.FLAG_UPDATE_CURRENT);
    }

Это мой приемник

   public void onReceive(Context context, Intent intent) {
        SettingTime settingTime = new SettingTime();
        Vibrator buzz;
        Toast.makeText(context, "Wake Up", Toast.LENGTH_LONG).show();
        context.getSystemService(Context.ALARM_SERVICE);
        buzz = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        buzz.vibrate(2000);
        showNotification(context);
        Alarm alarm = new Alarm();
        Bundle b = (Bundle) intent.getBundleExtra("CallingAlarm");
        assert b != null;
        alarm = (Alarm) b.getSerializable("SerialAlarm");
        assert alarm != null;
        settingTime.setAlarm(alarm);
    }

Я звоню checkAlarm с AlarmManager и пытаюсь снова установить тот же сигнал тревоги. SettingTime - это объект моей основной деятельности, в котором есть функция для повторного вызова AlarmManager. Однако, когда срабатывает первый сигнал тревоги, я получаю сообщение об ошибке:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

Я знаю, что код не очень красивый, но я хочу, чтобы он работал до того, как я его почистил, но я не могу понять, что я делаю неправильно

Это мой метод setAlarm

public void setAlarm(Alarm alarm) {

        Calendar c = Calendar.getInstance();
        Date currentDate = new Date();
        c.setTime(currentDate);

        calendar.set(Calendar.HOUR_OF_DAY,(alarm.getHour()));
        calendar.set(Calendar.MINUTE,alarm.getMinute());
        calendar.set(Calendar.SECOND,0);
        calendar.set(Calendar.DATE,c.get(Calendar.DATE));
        calendar.set(Calendar.MONTH,c.get(Calendar.MONTH));
        calendar.set(Calendar.YEAR,c.get(Calendar.YEAR));
        days = alarm.getDays();



        if(days[Calendar.MONDAY - 1] && alarm.getStatus()){
            calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
            }
        }
        if(days[Calendar.TUESDAY - 1]&& alarm.getStatus()){
            calendar.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));

            }
        }
        if(days[Calendar.WEDNESDAY - 1]&& alarm.getStatus()){
            calendar.set(Calendar.DAY_OF_WEEK,Calendar.WEDNESDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
            }
        }
        if(days[Calendar.THURSDAY- 1]&& alarm.getStatus()){
            calendar.set(Calendar.DAY_OF_WEEK,Calendar.THURSDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
            }
        }
        if(days[Calendar.FRIDAY- 1]&& alarm.getStatus()){
            calendar.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
            }
        }
        if(days[Calendar.SATURDAY - 1]&& alarm.getStatus()){
            calendar.set(Calendar.DAY_OF_WEEK,Calendar.SATURDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
            }
        }
        if(days[Calendar.SUNDAY - 1]&& alarm.getStatus()) {
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
           }
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...