내 서비스와 활동간에 양방향 통신을 시도하고 있습니다. 이렇게하려면 보통처럼 내 서비스를 시작하고 replyTo가 포함 된 메시지를 내 활동의 메신저로 보내고 내 서비스로 보냅니다. 그렇게하면 양쪽 방향으로 메시지를 보낼 수있는 참조가 있습니다. mService이 시간에 널 (null)이기 때문에서비스가 초기화되지 않았으므로 NullPointerException이 반환됩니다.
private Messenger mService = null;
private final Messenger mMessenger = new Messenger(new IncomingHandler());
private ServiceConnection mConnection = new ServiceConnection()
{
public void onServiceConnected(ComponentName className, IBinder service)
{
mService = new Messenger(service);
mBound = true;
}
public void onServiceDisconnected(ComponentName className)
{
mService = null;
mBound = false;
}
};
private void initMessenger()
{
Message messageHandler = Message.obtain(null, NetworkService.MSG_GET_HANDLER, 0, 0);
messageHandler.replyTo = mMessenger; //Set the replyTo to give a reference
try
{
mService.send(messageHandler);
}
catch(RemoteException e)
{
e.printStackTrade();
}
catch(NullPointerException e)
{
e.printStackTrace(); //Why!!!
}
}
public void onCreate()
{
...
//Create the intent to start the network service
Intent iService = new Intent(this, NetworkService.class);
int[] connectionConfig = {CONNECTION_BT};
iService.putExtra(CONNECTION_CONFIG, connectionConfig);
bindService(iService, mConnection, Context.BIND_ABOVE_CLIENT);
startService(iService);
initMessenger();
}
가 NullPointerException이는 내가 mService.send을 (를 호출 할 때 발생합니다), 대부분 : 여기 내 Activty에서 몇 가지 관련 코드입니다. 버튼의 OnClickListener 안에 initMessenger() 코드를 옮기면 혼란이 오는 곳에서 잘 작동합니다. 서비스를 사용하기 시작한 후 일정 시간을 기다려야합니까?