0

Twitter に投稿を公開するためにいくつかのアラームをスケジュールしようとしています。NullPointerException を取得しているため、使用方法がわかりません。

投稿のリストがあり、それらを twitter に投稿したいので、これが私がしたことです。WakefulIntentService クラスの scheduleAlarms メソッドには、投稿リストを反復処理し、投稿オブジェクトを putExtra メソッドに追加する for ループがあります。

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 ポスト オブジェクトを取得しますが、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());
}

これは私が達成したいことをする正しい方法ですか?

前もって感謝します

4

1 に答える 1

0

NullPointerException は、intent.getParcelableExtra("post") が null であることを示しています。

私の推測では、への呼び出しの一部として、あなたのエクストラをサービスにBroadcastReceiver転送していません。postsendWakefulWork()

これは私が達成したいことをする正しい方法ですか?

おそらくそうではありません。投稿を 1 つだけ送信し、残りはすべて無視します。また、ユーザーがデバイスの電源をオフにしたり、デバイスを再起動したりすると、投稿を正しく行うことさえできなくなります。

1 つのスケジュールされたアラームを1 つ 使用しPendingIntentます。投稿は永続的なデータ ストアにある必要があるため、WakefulIntentService送信する投稿をデータ ストアからロードします。からすべての余分なものを削除しますPendingIntent。それらは不要になり、電源オフまたは再起動イベントの場合に簡単に再構成できなくなるためです。

于 2013-02-07T12:09:35.197 に答える