1

ブロードキャストを受信したときにデータベースからのエントリを通知として表示するように設定されたアプリがあります。そのデータベース エントリの _id は、ブロードキャストの意図の追加として渡されます。通知がクリックされると、アプリはそのデータベース エントリをアクティビティに表示することになっています。

そこで、ブロードキャスト レシーバーのコード サンプルを次に示します。

Long itemID = intent.getLongExtra("com.my.app.receiver.ID", -1);
MyDatabaseHelper helper = new MyDatabaseHelper(context);
Log.i("MyApp", "Received item "+itemID);
Intent pending = new Intent(context, NotifyDisplay.class);
pending.putExtra("com.my.app.NOTIFY", itemID);
PendingIntent onNotifyClick = PendingIntent.getActivity(context,
                    1234567, pending, PendingIntent.FLAG_ONE_SHOT);

そこから、PendingIntent が通知にスローされ、アクティビティはそれgetIntent().getLongExtra()を取得するために使用されます。ただし、LogCat は別のストーリーを示しています。

07-25 23:45:00.046: I/MyApp(19630): Received item 1
07-25 23:45:05.456: D/dalvikvm(19630): GC_EXPLICIT freed 47K, 52% free 3213K/6599K, external 6314K/7884K, paused 64ms
07-25 23:45:29.705: I/Notification(19630): Displaying task 0
07-25 23:45:29.755: D/AndroidRuntime(19630): Shutting down VM
07-25 23:45:29.755: W/dalvikvm(19630): threadid=1: thread exiting with uncaught exception (group=0x40015560)
07-25 23:45:29.847: E/AndroidRuntime(19630): FATAL EXCEPTION: main

どういうわけか、アプリは完全に間違ったアイテムを表示しようとしています (そして失敗しています)。余分なものが渡されたときに変更されている理由を誰か教えてもらえますか?

4

1 に答える 1

0

itemID.longValue()に入れているエクストラとして使用することで、問題を解決したようですpending。どうやら、getLongExtra()プリミティブ値を取得するため、 a のLong代わりに aを入れるlongと問題が発生するようです。

于 2012-08-05T22:28:01.693 に答える