广播接收器空指针Android

时间:2017-04-13 23:06:40

标签: android service nullpointerexception android-broadcastreceiver

我一直收到以下错误:

> java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.BroadcastReceiver.onReceive(android.content.Context, android.content.Intent)' on a null object reference

当我尝试从我的服务类接收广播时。

服务:

   @Override
public void onDestroy(){
    super.onDestroy();
    Intent intent = new Intent("UpdateLocation");
    intent.putExtra("Location",journ);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

这是发送广播的代码,用于向我的主要活动发送自定义对象(Journ)。

主:

  @Override
protected void onCreate(Bundle savedInstanceState) 

  LocalBroadcastManager.getInstance(this).registerReceiver(
            mReceiver, new IntentFilter("UpdateLocation"));

    //Listen for service to send location data
    mReceiver = new BroadcastReceiver() {
        @Override
       public void onReceive(Context context, Intent intent) {
            temp= intent.getExtras().getParcelable("Location");
        }
    };
}

   @Override
    public void onPause() {
        if (!tracking) {
            finish();
        }
        //Run service in background to keep track of location
   startService(new Intent(this, locationService.class));
        super.onPause();
    }

    @Override
    public void onResume() {
        if (!tracking) {
            return;
        }
        if (mGoogleApiClient != null) {
            //Reconnect to google maps
            mGoogleApiClient.reconnect();
        }
       stopService(new Intent(this, locationService.class));
        super.onResume();
    }

我不知道该怎么做,我试图从我的服务类中传递对象,当我的应用程序在后台运行时,当它恢复时服务应停止并将收集的数据发送给我主要活动。

然而,这不起作用,任何想法?

如果人们想知道我的on create方法确实包含更多代码,但我认为没有必要包括。

1 个答案:

答案 0 :(得分:1)

在onCreate中,mReciever是一个空对象(如果你之前没有指定它),所以你应该在注册一个接收器之前分配它。 改变这一部分:

if (mReceiver == null) {
    mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             temp= intent.getExtras().getParcelable("Location");
        }
    };
}

//Listen for service to send location data
LocalBroadcastManager.getInstance(this)
    .registerReceiver(mReceiver, new IntentFilter("UpdateLocation"));