サービスでメソッドを呼び出しようとしたときと同じように、フラグメントからサービスをバインドしようとしていますが、NullPointerExceptionが発生します。サービスがnullであることは明らかです。今、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;
mConnectionには何がありますか?プラス、ポストスタックトレース – njzk2
サービスのバインディングはContextに結びついているので、これはうまくいくはずです。私は他の場所に問題があると思うので、もっとコードを表示するべきです。 – jsmith
@jsmith私は喜んでより多くのコードを表示したいと思いますが、なぜサービスがnullになるのかを具体的に知る必要があります。私は元の質問にstacktraceを含めるように編集しました – CodePrimate