广播接收器错误空指针探测

时间:2016-12-23 20:32:13

标签: android service android-broadcastreceiver

在我的主要活动中,我有一个广播接收器

    public static class the_receive extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            if(extras.containsKey("retvalue")){
                test.setText(extras.get("retvalue").toString());
            }
        }
    }
};

并在我的Android清单中

 <receiver
        android:name=".MainActivity$the_receive"
        android:enabled="true">
        <intent-filter>
            <action android:name="ax.androidexample.mybroadcast" />
        </intent-filter>
    </receiver>

这完全正常并接收传入的值。

但是当我想在另一个活动中接收另一个广播时

public static class b_receive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            if(extras.containsKey("retvalue")){
                text.setText(extras.get("retvalue").toString());
            }
        }
    }
};

在我的Android Manifest中

    <receiver
        android:name=".MainActivity$the_receive"
        android:enabled="true">
        <intent-filter>
            <action android:name="ax.androidexample.mybroadcast" />
        </intent-filter>
    </receiver>
    <receiver
        android:name=".testService$b_receive"
        android:enabled="true">
        <intent-filter>
            <action android:name="ax.androidexample.mybroadcast" />
        </intent-filter>
    </receiver>

我开始收到此错误:

Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

在我的MainActivity中

任何帮助将不胜感激。谢谢你堆

1 个答案:

答案 0 :(得分:1)

考虑通过覆盖活动生命周期的方法或使用接收器的片段来注册和取消注册接收器。

活动现场循环: https://developer.android.com/guide/components/activities/activity-lifecycle.html

片段生命周期: https://developer.android.com/guide/components/fragments.html

  • 您必须在活动开始前取消注册您的接收器 无效。
  • 当您的活动成为时,您必须再次注册 活性。
相关问题