gpt4 book ai didi

java - Android Service-Activity 2种通信方式

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:24 26 4
gpt4 key购买 nike

在我团队的 Android 应用程序中,我有一个从启动运行的服务,它与服务器通信以执行登录、注册、手机聊天和更新手机数据库等操作。

我需要让我的服务与 Activity 双向通信:例如,我目前正在处理登录 Activity ,用户名和密码是从应用程序屏幕上的文本字段中获取的字符串,我已经能够将它们传递给服务,以便它向服务器发送授权命令。

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) {

}

这如我所料。当服务器响应一条消息说明登录是否成功时,我需要它向 Activity 传回一条消息,以便我可以在成功时启动主要 Activity,否则提示重新登录。

我尝试使用 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);

两种情况下的代码行(登录成功和登录失败)

如果能帮助解决这个问题,我们将不胜感激:)

最佳答案

正如 Gregg 在评论中指出的那样。您需要在发送原始消息的位置设置 msg.replyTo = messenger;

可在此处找到示例:http://www.survivingwithandroid.com/2014/01/android-bound-service-ipc-with-messenger.html

关于java - Android Service-Activity 2种通信方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9489075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com