Cod*_*ate 8 android android-fragments
我试图从一个片段绑定一个服务,就像我在一个活动中成功完成一样,但是当我尝试在服务上调用一个方法时,我得到一个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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉.这是我没有充分考虑这个问题的错误.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;
}
};
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪 :
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)
Run Code Online (Sandbox Code Playgroud)
这将是抛出异常的确切位置:case 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;
Run Code Online (Sandbox Code Playgroud)
Cod*_*ate 13
我解决了这个问题.原来我忘记在我的清单中提供正确的包名称的服务声明.
通过改变
<service android:name=".LiteTrickService" />
Run Code Online (Sandbox Code Playgroud)
至
<service android:name="lite.hattrick.services.LiteTrickService" />
Run Code Online (Sandbox Code Playgroud)
我解决了问题,现在服务按预期连接.
| 归档时间: |
|
| 查看次数: |
11543 次 |
| 最近记录: |