gpt4 book ai didi

java - XMPP 无法设置监听器

转载 作者:行者123 更新时间:2023-11-30 04:25:31 24 4
gpt4 key购买 nike

我已经成功连接到 XMPP 服务器(从 android XMPP 客户端),我可以向用户发送消息,但我无法接收来自同一用户的响应。

我正在发送这样的消息:

  public void send_message(String message, String buddy) throws XMPPException {
buddy += "@localhost";

/* send message to user */
Log.w("Sending mesage " + message + " to user " + buddy, "0");
chat = chatManager.createChat(buddy, messageListener);
chat.sendMessage(message);
}

我将 messageListener 传递给 createChat 函数。 MessageListener 的类是:

class XMPPMessageListener implements MessageListener {
private String from;
private String body;

public void processMessage(Chat chat, Message message) {
this.from = message.getFrom();
this.body = message.getBody();
Log.w("*****Received message" + body + " from " + from, "0*****");
}

}

向用户发送消息时,我得到以下调试输出:

W/Sending mesage play to user test@localhost(  823): 0
D/SMACK ( 823): 10:43:54 AM SENT (1156346368): <message id="vwaJX-15" to="test@localhost" from="eleano@localhost/Smack" type="chat"><body>test</body><thread>249ke0</thread></message>
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): <presence id="vwaJX-12" to="eleano@localhost/Smack" from="eleano" type="error"><error code="404" type="cancel"><remote-server-no
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): t-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence>
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): <presence id="vwaJX-14" to="eleano@localhost/Smack" from="test" type="error"><error code="404" type="cancel"><remote-server-not-
D/SMACK ( 823): 10:43:54 AM RCV (1156346368): found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence>

并且消息“test”显示给连接的用户 test(在本例中)。我正在发送来自用户 eleano 的消息。我们还可以看到屏幕上有调试输出“ending message play to user test@localhost”,说明我的函数确实调用成功了。

收到从测试到 eleano 的消息后,我只得到这个调试输出:

D/SMACK   (  823): 10:44:00 AM RCV  (1156346368): <message id="58Fjj-64" to="eleano@localhost/Smack" from="test@localhost/Spark 2.6.3" type="chat"><body>yes</body><thread>0tlK7o<
D/SMACK ( 823): 10:44:00 AM RCV (1156346368): /thread><x xmlns="jabber:x:event"><offline/><composing/></x></message>

但是用户 eleano 没有收到消息。我们还可以注意到没有:

Log.w("*****Received message" + body + " from " + from, "0*****");

显示在屏幕上,因此永远不会调用 MessageListener。这是为什么?我已经按照文档中的说明正确设置了它。

欢迎任何想法。谢谢。

最佳答案

感谢您指出这一点。根据您的观察,我在连接上设置了一个监听器(并监听了 Char 类型的包),而不是在聊天对象本身上设置了一个监听器。

现在我的代码如下所示。我正在发送这样的包裹:

Message m = new Message(buddy, Message.Type.chat);
m.setBody(message);
connection.sendPacket(m);

并收到如下消息:

  /* packet listener: listen for incoming messages of type CHAT on the connection (whatever the buddy) */
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
xmppManager.connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message mes = (Message)packet;
Log.w("***"+mes.toString()+"***","0");
}
}, filter);

而且它有效。我可以向用户发送消息并接收它们。

关于java - XMPP 无法设置监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614640/

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