私は電話の間でチャットや電話のデータベースを更新し、登録し、ログインなどの操作を実行するためにサーバーと通信し、ブートから実行されているサービスがあります。Androidのサービス-活動2ウェイ通信
サービスを双方向でアクティビティと通信する必要があります。たとえば、現在のところログインアクティビティに取り組んでいます。ユーザー名とパスワードは、アプリケーション画面のテキストフィールドから取得した文字列です。サーバーに認証コマンドを送信するためにサービスに渡すことができます。
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ポインタ例外が発生し、なぜこれが起こっているのかわかりません。ここでは犯人であると思われるコードは次のとおりです。
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;
NULLポインタは両方のケースでは、コードの
msg.replyTo.send(m);
ラインから来ているようだ(失敗した成功してログインログイン)
が この問題を解決するために任意の助けいただければ幸いです:)
私はreplyToフィールドに精通していないです...しかし、メッセージのあなたのreplyToメンバーがnull表示されます。元のメッセージを送信するときに割り当てる必要があります。たとえば、 'msg.replyTo = messenger;'を追加します。 –
グレッグの解決策が正しい場合、誰かが答えてくれますか?コードは十分に良いようで、それはAIDLやその他の複雑なものを使用していません... – Radu
グレッグの答えは正しいです。ここで読む:http://www.survivingwithandroid.com/2014/01/android-bound-service-ipc-with-messenger.html –