首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LocalBroadcastManager时的NullPointerException

使用LocalBroadcastManager时的NullPointerException
EN

Stack Overflow用户
提问于 2013-05-05 07:48:13
回答 2查看 4.5K关注 0票数 10

我正在尝试将LocalBroadcastManager与我的自定义意图一起使用。它似乎对意图非常挑剔,如果我这样发送意图:

在Myintents.java中,我声明

代码语言:javascript
复制
public static final String LOCATION_UPDATE = "com.example.myapp.location_update";

在稍后的广播发送器中,我这样做:

代码语言:javascript
复制
Intent intent = new Intent(MyIntents.LOCATION_UPDATE);
localBroadcastManager.sendBroadcast(intent);

然后我得到了这个异常:

代码语言:javascript
复制
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)

但是,如果我使用显式字符串

代码语言:javascript
复制
Intent intent = new Intent("my-intent");

一切都很好。

怎么了?为什么我不能在另一个类中定义意图名称?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-23 04:08:37

我只是偶然发现了这个。NPE是您正在触发的事件(MyIntents.LOCATION_UPDATE)的注册侦听器(read: receiver)尚未被托管它的组件实例化的结果。

检查您想要响应此广播的内容是否已在正确的点(可能是托管活动/片段)进行了实例化。

票数 17
EN

Stack Overflow用户

发布于 2013-06-20 18:48:03

在我的例子中,(我有同样的错误)我忘记创建一个扩展BroadcastReceiver的类的实例。(并覆盖onReceive()方法)

代码语言:javascript
复制
    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();
    }
}

使用以下命令将此类的空引用传递给LocalBroadcastManager:

代码语言:javascript
复制
LocalBroadcastManager.getInstance(this).registerReceiver(m_MeasurementUpdateReceiver, new IntentFilter("measurementupdate"));

在它尝试调用该类的onReceive()方法之前并不是问题。我忘记的是:

代码语言:javascript
复制
m_MeasurementUpdateReceiver = new MeasurementUpdateReceiver();

我希望这对其他面临这个错误的人有所帮助。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16380006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档