我試圖從一個片段綁定一個服務,就像我在一個活動中成功完成一樣,但是當我嘗試調用服務上的方法時,我得到一個NullPointerException - 很明顯,因爲服務是空的。現在有沒有在onStart中綁定服務的問題,或者我只是做錯了嗎?如何綁定服務從一個片段
@Override
public void onStart() {
super.onStart();
Intent intent = new Intent(getActivity(), LiteTrickService.class);
getActivity().registerReceiver(receiver, new IntentFilter(LiteTrickService.BROADCAST_ACTION));
getActivity().registerReceiver(receiver, new IntentFilter(LiteTrickService.BROADCAST_FAIL));
getActivity().bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
public void onStop() {
super.onStop();
getActivity().unbindService(mConnection);
getActivity().unregisterReceiver(receiver);
mBound = false;
}
編輯:對不起。這是我的錯誤,因爲沒有充分考慮這個問題。 mConnection是ServiceConnection,看起來像這樣:
private ServiceConnection mConnection = new ServiceConnection()
{
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
堆棧跟蹤:
01-03 15:21:22.355: E/AndroidRuntime(12360): FATAL EXCEPTION: main
01-03 15:21:22.355: E/AndroidRuntime(12360): java.lang.NullPointerException
01-03 15:21:22.355: E/AndroidRuntime(12360): at lite.hattrick.players.PlayerRankingFragment.onOptionsItemSelected(PlayerRankingFragment.java:205)
而這將是在拋出異常的確切地點: 情況下POPULATE_ID:
if (hasData) {
return false;
}
if(!mBound)
getActivity().bindService(new Intent(getActivity().getApplicationContext(), LiteTrickService.class), mConnection, Context.BIND_AUTO_CREATE);
mService.refreshPlayers(); // Null Pointer Exception as mService is null
pBar.setVisibility(View.VISIBLE);
return true;
wwhat在mConnection中?另外,發佈堆棧跟蹤 – njzk2
服務綁定綁定到上下文,所以應該可以工作。你應該展示更多的代碼,因爲我懷疑問題在別處。 – jsmith
@jsmith我很樂意展示更多的代碼,但我需要具體知道爲什麼服務將爲空。我編輯了我的原始問題以包含棧跟蹤 – CodePrimate