java – Android Service-Activity 2方式通信
发布时间:2020-12-15 02:31:57 所属栏目:Java 来源:网络整理
导读:在我的团队的 Android应用程序中,我有一个从启动运行的服务,它与服务器通信以执行诸如登录,注册,在电话之间聊天和更新电话数据库等操作. 我需要让我的服务与双向活动进行通信:例如,我正在处理登录活动,用户名和密码是从应用程序屏幕上的文本字段中获取的字
在我的团队的
Android应用程序中,我有一个从启动运行的服务,它与服务器通信以执行诸如登录,注册,在电话之间聊天和更新电话数据库等操作.
我需要让我的服务与双向活动进行通信:例如,我正在处理登录活动,用户名和密码是从应用程序屏幕上的文本字段中获取的字符串,我已经能够通过它们向服务器发送授权命令到服务器. 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字段来获取返回信使以发回信息,但是当我运行应用程序时,它会以空指针异常关闭,我不知道为什么会发生这种情况.这是代码似乎是罪魁祸首: 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; 空指针似乎来自于 msg.replyTo.send(m); 两种情况下的代码行(登录成功和登录失败) 任何帮助解决这个问题将不胜感激:) 解决方法
正如格雷格在评论中指出的那样.你需要设置msg.replyTo = messenger; int他发送原始邮件的地方.
可以在这里找到一个例子:http://www.survivingwithandroid.com/2014/01/android-bound-service-ipc-with-messenger.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |