-1

我不斷收到以下錯誤:廣播接收機空指針的Android

> 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(); 
    } 

我不知道如何去這樣做,我想從它運行我的服務類傳遞對象時,我的應用程序在後臺運行,當它恢復服務應該停止並將收集的數據發送給我的主要活動。

但是,這不起作用,有什麼想法?

如果人們想知道我的創建方法確實包含更多的代碼,但我認爲沒有必要包含它。

回答

1

在onCreate mReciever是一個空對象(如果您以前沒有指定它),所以您應該在註冊接收器之前分配它。 更換此零件:

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"));