Apr*_*Ori 10 android broadcastreceiver android-intent
我正在尝试将LocalBroadcastManager与我的自定义意图一起使用.似乎它对意图非常挑剔,如果我以这种方式发送意图:
在Myintents.java中,我声明了
public static final String LOCATION_UPDATE = "com.example.myapp.location_update";
Run Code Online (Sandbox Code Playgroud)
稍后在广播发送者中我做:
Intent intent = new Intent(MyIntents.LOCATION_UPDATE);
localBroadcastManager.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
然后我得到这个例外:
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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用显式字符串
Intent intent = new Intent("my-intent");
Run Code Online (Sandbox Code Playgroud)
一切正常.
怎么了?为什么我不能在另一个类中定义意图名称?
Oce*_*ife 17
我刚刚遇到过这个.NPE是注册侦听器(读取:接收方)的结果,因为您正在触发的事件(MyIntents.LOCATION_UPDATE)尚未由托管它的组件实例化.
检查您要响应此广播的内容是否已在实际位置(可能是托管活动/片段)实例化.
小智 12
在我的情况下,(我有同样的错误)我忘了创建扩展BroadcastReceiver的类的实例.(并覆盖onReceive()方法)
private MeasurementUpdateReceiver m_MeasurementUpdateReceiver;
// Listens to local broadcasts done by the MeasurementService
private class MeasurementUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Intent already filtered by the LocalBroadcastManager in onResume()
String data = intent.getStringExtra("data"));
Toast.makeText(getApplicationContext(), "Received data " + data, Toast.LENGTH_LONG).show();
}
}
Run Code Online (Sandbox Code Playgroud)
将此类的空引用传递给LocalBroadcastManager:
LocalBroadcastManager.getInstance(this).registerReceiver(m_MeasurementUpdateReceiver, new IntentFilter("measurementupdate"));
Run Code Online (Sandbox Code Playgroud)
在尝试调用类的onReceive()方法之前没有问题.我忘了的是:
m_MeasurementUpdateReceiver = new MeasurementUpdateReceiver();
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助其他人面对这个错误.
| 归档时间: |
|
| 查看次数: |
4206 次 |
| 最近记录: |