2

当 device1 将消息发送到会议室“del@conference.jabber.org”时,该消息将显示在聊天列表中,并且还会显示一条重复的消息,该消息正在由会议室“del@conference.jabber”发送.org”。我被卡住了,为什么我收到重复的消息。

public void setConnection(XMPPConnection connection) {
    this.connection = connection;
    if (connection != null) {
      PacketFilter filter = new MessageTypeFilter(Message.Type.groupchat);
      connection.addPacketListener(new PacketListener() {
        @Override
        public void processPacket(Packet packet) {
          Message message = (Message) packet;
          if (message.getBody() != null) {
            String fromName = StringUtils.parseBareAddress(message.getFrom());
            String[] parts = fromName.split("@");
            String from = parts[0].trim();
            messages.add(from + ":");
            messages.add(message.getBody());
            // Add the incoming message to the list view
            mHandler.post(new Runnable() {
              public void run() {
                setListAdapter();
              }
            });
          }
        }
      }, filter);
    }
  }

发送消息是点击按钮,如下

Button send = (Button) this.findViewById(R.id.sendBtn);
            send.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    Message mg = muc.createMessage();
                    String text = textMessage.getText().toString();       
                    mg.setBody(text);
                    Log.i("XMPPChatDemoActivity ", "Sending text ");
                    if (connection != null) {
                        connection.sendPacket(mg);
                        messages.add("Me :");
                        messages.add(text);
                        setListAdapter();
                    }
                    textMessage.setText("");
                }
            });

这就是我为连接会议室而写的

muc = new MultiUserChat(connection, "del@conference.jabber.org");
            muc.join("alias name","password");

输出我在发送消息时得到的

me: hello
del: hello

我想要什么,我发送消息时没有重复的消息,即

me: hello
4

2 回答 2

4

当您在 MUC 房间时,您会收到所有消息的副本,包括您自己的消息。 http://xmpp.org/extensions/xep-0045.html#message -“并将消息反映到每个占用者的完整 JID。”

因此,对于 MUC(不适用于直接消息),如果您同时登录发送和接收(假设您有足够的权限访问帖子等),您将得到一个副本。您的选择主要是在发送时不记录(这是大多数客户选择的选项),或者尝试进行智能消息匹配以检测您何时收到自己的消息并忽略它。前一个选项确保每个人都能看到一致的消息排序视图,有些人认为这非常有用。

于 2014-08-27T19:12:33.273 回答
2

也许您的聊天服务器也将您的消息发送给您?

因此,您手动添加一条消息onClickListener,然后从服务器接收到相同的消息。

我认为,不添加来自的消息是正确的onClickListener- 仅添加服务器发送的那些。

于 2014-08-27T07:15:06.350 回答