我正在尝试安排几个闹钟以将帖子发布到Twitter。我不确定用法,因为我得到一个NullPointerException。
我有一个帖子列表,我想将它们发布到Twitter,所以这就是我所做的。 在WakefulIntentService类的scheduleAlarms方法中,我有一个for循环迭代帖子List并将一个post对象添加到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对象,但是我得到了nullpointerexception:
@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());
}
这是做我想做的事的正确方法吗?
提前致谢
答案 0 :(得分:0)
NullPointerException指出intent.getParcelableExtra(“post”)为空。
我的猜测是,BroadcastReceiver
并未将post
个额外信息转发给服务,而是调用sendWakefulWork()
。
这是做我想做的事的正确方法吗?
可能不会,因为您只会发送一个帖子,而忽略所有其他帖子,如果用户关闭电源或重新启动设备,您甚至无法正确执行此操作。
使用一个 PendingIntent
一个预定闹钟。由于您的帖子需要位于持久性数据存储中,因此请WakefulIntentService
加载要从数据存储发送的帖子。消除PendingIntent
中的所有额外内容,因为它们不再需要,并且在断电或重启事件时无法轻松重建。