aSmack MessageListener 的 processMessage 永远不会被调用
Posted
技术标签:
【中文标题】aSmack MessageListener 的 processMessage 永远不会被调用【英文标题】:aSmack MessageListener's processMessage never being called 【发布时间】:2012-01-20 01:01:59 【问题描述】:我正在尝试使用 aSmack 在 android 手机之间设置 XMPP 通信的基础知识。我设法从我的应用程序注册了一个帐户,并将消息发送到我在我的 PC 上登录的 Jabber-ID。问题是我的 PC 客户端似乎没有收到回复,我的 MessageListener 中的 processMessage() 似乎没有被调用。
tryconnection.login("kmomochesstest", "password1");
catch(Exception e)Log.e("connection","Account login error: " + e.toString());
chat = connection.getChatManager().createChat("chesstestpc@macjabber.de", new MessageListener()
public void processMessage(Chat chat, Message message)
trySystem.out.println(message.getBody());
catch(Exception e)Log.e("connection","Message send error: " + e.toString());
);
trychat.sendMessage("Test Message from Activity");Log.d("connection","Just sent Message ");
catch(Exception e)Log.e("connection","Message send error: " + e.toString());
此时我正在尝试打印到控制台,但我已尝试打印到日志并使用 chat.sendMessage(message.getBody()) 回显到我的 PC。似乎没有任何东西可以注册传入的消息。这似乎是我在网上找到的所有操作指南的格式。
【问题讨论】:
我正在使用 aSmack-2010.05.07,据我所知,这是最新版本,不确定使用的是什么版本的 Smack。我确实最终做了一个 ChatManagerListener 并且确实收到了我所需要的几乎所有的回复。附带说明一下,这在我的应用程序的几次运行中运行良好。但是现在,当我最初尝试连接到我的服务器时,我收到“无法连接到域:端口:远程服务器超时。(504)。原因:java.net.UnknownHostException:主机未解析:域:端口”的想法?? 这已通过重置我的计算机来解决。 【参考方案1】:您使用的是什么版本的 Smack?
在尝试将不包含线程 ID 的消息与使用线程 ID 创建的现有聊天匹配时(如 Smack 所做的那样),在早期版本中存在问题。例如,Pidgin 不使用线程 id,这反过来会在收到消息时创建一个新的聊天实例。
匹配过程在 3.2 中得到了改进,以防止这种情况发生。
尝试创建一个 ChatManagerListener 并查看是否从您的回复中创建了新的聊天。
【讨论】:
我正在使用 aSmack-2010.05.07,据我所知,这是最新版本,不确定使用的是什么版本的 Smac。我确实最终做了一个 ChatManagerListener 并且确实收到了我所需要的几乎所有的回复。 这是旧版本的 Smack。我认为大多数人现在实际上都在使用 Smack 和一些小模组来使其在 Android 上运行。然后,您将受益于新版本的 Smack。 是的,它似乎可以满足我想要的真正基本的消息传递需求,所以我很好。我真的不需要更复杂的 PubSub 功能。以上是关于aSmack MessageListener 的 processMessage 永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章
自定义 MessageListener 到 DefaultMessageListenerContainer 被覆盖
如何在 JMS 中使用带有 MessageListener 的消息转换器?