10

カスタム インテントで LocalBroadcastManager を使用しようとしています。インテントについては非常にうるさいようです。インテントをこの方法で送信した場合:

Myintents.java で宣言します

public static final String LOCATION_UPDATE = "com.example.myapp.location_update";

後でブロードキャスト送信者で次のことを行います。

Intent intent = new Intent(MyIntents.LOCATION_UPDATE);
localBroadcastManager.sendBroadcast(intent);

次に、この例外が発生します。

05-05 02:23:29.914: E/AndroidRuntime(6952): FATAL EXCEPTION: main 
05-05 02:23:29.914: E/AndroidRuntime(6952): java.lang.NullPointerException 
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297) 
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)  
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116) 
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.os.Handler.dispatchMessage(Handler.java:99)

ただし、明示的な文字列を使用すると

Intent intent = new Intent("my-intent");

すべて正常に動作します。

どうしたの?別のクラスでインテント名を定義できないのはなぜですか?

4

2 に答える 2

17

私はちょうどこれに出くわしました。NPE は、起動しているイベント (MyIntents.LOCATION_UPDATE) の登録済みリスナー (読み取り: レシーバー) が、それをホストするコンポーネントによってインスタンス化されていないことの結果です。

このブロードキャストに応答したいものが実際に適切なポイント (おそらくホスティング アクティビティ/フラグメント) でインスタンス化されていることを確認します。

于 2013-05-22T20:08:37.487 に答える