내 팀 안드로이드 응용 프로그램 로그인, 등록, 전화 채팅 및 전화 데이터베이스 업데이트와 같은 작업을 수행하기 위해 서버와 통신하는 부팅 서비스가 있습니다.안드로이드 서비스 - 활동 양방향 통신
내 서비스가 양방향으로 활동과 통신하도록해야합니다. 예를 들어 현재 로그인 활동을하고 있으며 사용자 이름과 비밀번호는 응용 프로그램 화면의 텍스트 필드에서 가져온 문자열입니다. 인증 명령을 서버에 전송할 수 있도록 서비스에 전달할 수 있습니다.
public void loginPressed(View v){
usernameStr = usernameField.getText().toString();
passwordStr = passwordField.getText().toString();
if (!bound) return;
Bundle b = new Bundle();
Message msg = Message.obtain(null, ChatService.LOGIN);
try {
b.putString("username", usernameStr);
b.putString("password", passwordStr);
msg.setData(b);
messenger.send(msg);
}
catch (RemoteException e) {
}
예상대로 작동합니다. 서버가 로그인이 성공했는지 여부를 알려주는 메시지로 응답 할 때 메시지를 액티비티로 다시 전달해야 성공할 경우 주 활동을 시작하거나 그렇지 않을 경우 재진입을 요청할 수 있습니다.
반환 메신저 정보를 다시 보내려면 msg.replyTo 필드를 사용해 보았지만 응용 프로그램을 실행할 때 강제로 null 포인터 예외가 발생하고 이유를 알 수 없습니다. 두 경우 모두에서 코드의
msg.replyTo.send(m);
라인에서 오는 될
private class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case LOGIN:
Bundle b = msg.getData();
String username = b.getString("username");
String password = b.getString("password");
String loginMessage = TCPCall.login(username, password);
connection.sendMessage(loginMessage);
String loginReturn = connection.retrieveMessage();
Message m;
Scanner s = new Scanner(loginReturn);
s.useDelimiter(",");
String c = s.next();
String status = s.next();
String message = s.next();
if (status.equals("OK")) {
m = Message.obtain(null, LoginActivity.OK);
try {
msg.replyTo.send(m);
} catch (RemoteException e) {}
}
else {
m = Message.obtain(null, LoginActivity.ERR);
try {
msg.replyTo.send(m);
} catch (RemoteException e) {}
}
break;
널 포인터가 보인다 (성공적인 로그인 및 로그인 실패)
다음은 범인 것으로 보인다 코드입니다이 문제를 해결하는 데 도움이 될 것입니다 :
나는 ReplyTo의 필드에 익숙하지 않다 ...하지만 :
예
는 여기에서 찾을 수 있습니다. 원본 메시지를 보낼 때 지정해야합니다. 예를 들어 'msg.replyTo = messenger;'를 추가하십시오. –Gregg의 해결책이 맞으면 누군가 대답 해 줄 수 있습니까? 코드가 충분 해 보입니다. AIDL이나 기타 복잡한 물건을 사용하지 않습니다. – Radu
Gregg의 대답은 정확합니다. 여기에서 읽기 : http://www.survivingwithandroid.com/2014/01/android-bound-service-ipc-with-messenger.html –