0

我正在尝试安排几个警报将帖子发布到 Twitter。我不确定用法,因为我收到 NullPointerException。

我有一个帖子列表,我想将它们发布到 Twitter,所以这就是我所做的。在 WakefulIntentService 类的 scheduleAlarms 方法中,我有一个 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);
        }

    }
}

然后在我的 AppService doWakefulWork 方法中,我得到 Parcelable post 对象,但我得到一个空指针异常:

@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());
}

这是做我想要实现的正确方法吗?

提前致谢

4

1 回答 1

0

NullPointerException 声明 intent.getParcelableExtra("post") 为空。

我的猜测是,BroadcastReceiver作为postsendWakefulWork().

这是做我想要实现的正确方法吗?

可能不会,因为您只会发送一个帖子,而忽略所有其他帖子,如果用户关闭或重新启动他们的设备,您甚至都不会正确地做到这一点。

一个预定闹钟与一个 PendingIntent. 由于您的帖子需要位于持久数据存储中,因此请WakefulIntentService加载要从数据存储发送的帖子。消除 中的所有额外PendingIntent内容,因为它们不再需要并且在断电或重新启动事件的情况下无法轻易重新构建。

于 2013-02-07T12:09:35.197 回答