Планирование нескольких будильников с помощью WakefulIntentService

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

у меня есть список сообщений, и я хотел бы опубликовать их в твиттере, вот что я сделал. В методе scheduleAlarms класса WakefulIntentService у меня есть цикл for, перебирающий список сообщений и добавляющий объект сообщения в метод putExtra:

public static void scheduleAlarms(AlarmListener listener, Context ctxt,
        boolean force) {
    SharedPreferences prefs = ctxt.getSharedPreferences(NAME, 0);
    long lastAlarm = prefs.getLong(LAST_ALARM, 0);

    if (lastAlarm == 0
            || force
            || (System.currentTimeMillis() > lastAlarm && System
                    .currentTimeMillis() - lastAlarm > listener.getMaxAge())) {
        AlarmManager mgr = (AlarmManager) ctxt
                .getSystemService(Context.ALARM_SERVICE);
        for (Iterator<Post> iterator = AlarmActivity.posts.iterator(); iterator
                .hasNext();) {
            Post post = (Post) iterator.next();

            Intent i = new Intent(ctxt, AlarmReceiver.class);
            i.putExtra("post", post);
            PendingIntent pi = PendingIntent.getBroadcast(ctxt,
                    (int) post.getId(), i, 0);
            listener.scheduleAlarms(mgr, pi, ctxt);
        }

    }
}

Затем в моем методе doWakefulWork AppService я получаю объект сообщения Parcelable, но получаю исключение nullpointer:

@Override
protected void doWakefulWork(Intent intent) {
    Log.i("AppService", "I'm awake! I'm awake! (yawn)");
    Post post = intent.getParcelableExtra("post");
    System.out.println("- " + post.getPost());
}

Это правильный способ сделать то, что я хочу достичь?

заранее спасибо


person pindleskin    schedule 05.02.2013    source источник
comment
Изучите трассировку стека Java, связанную с вашим NullPointerException.   -  person CommonsWare    schedule 07.02.2013
comment
Привет, CommonsWare, исключение NullPointerException указывает, что намерение.getParcelableExtra(post) равно null.   -  person pindleskin    schedule 07.02.2013
comment
Я действительно не знаю, как настроить несколько будильников в списке   -  person pindleskin    schedule 07.02.2013


Ответы (1)


NullPointerException указывает, что намерение.getParcelableExtra("post") равно null.

Я предполагаю, что ваш BroadcastReceiver не перенаправляет ваш post дополнительный сервис в рамках своего вызова sendWakefulWork().

Это правильный способ сделать то, что я хочу достичь?

Вероятно, нет, так как вы отправите только одно сообщение, игнорируя все остальные, и вы даже не сделаете это правильно, если пользователь выключит или перезагрузит свое устройство.

Используйте один запланированный будильник с одним PendingIntent. Поскольку ваши сообщения должны находиться в постоянном хранилище данных, WakefulIntentService загрузите сообщения для отправки из хранилища данных. Удалите все дополнительные компоненты из PendingIntent, так как они больше не нужны и не могут быть легко восстановлены в случае отключения питания или перезагрузки.

person CommonsWare    schedule 07.02.2013
comment
Спасибо большое, попробую ваши советы - person pindleskin; 07.02.2013
comment
Еще один вопрос. Как/где в WakefulIntentService я загружаю сообщения из списка? - person pindleskin; 07.02.2013
comment
@pindleskin: Как/где в WakefulIntentService я загружаю сообщения из списка? -- как я уже писал, поскольку ваши сообщения должны находиться в постоянном хранилище данных, WakefulIntentService загрузите сообщения для отправки из хранилища данных. - person CommonsWare; 07.02.2013
comment
Хорошо, понял, т.е. из общих настроек. Теперь единственная проблема в том, что я не могу публиковать посты подряд, между ними должен быть 15-минутный промежуток. - person pindleskin; 07.02.2013
comment
Кажется, я не могу заставить его работать. Отлично работает для одиночных будильников, но я не могу удовлетворить свои потребности. - person pindleskin; 07.02.2013
comment
@pindleskin Вам удалось решить проблему? Если да, не могли бы вы опубликовать свое решение? - person Sarp Kaya; 27.01.2014
comment
@pindleskin, пожалуйста, будет полезно, если вы поделитесь своим решением - person Srishti Roy; 02.07.2015