XMPP多用户会议室收到重复消息

XMPP多用户会议室收到重复消息,xmpp,smack,muc,Xmpp,Smack,Muc,设备1向会议室发送消息时“del@conference.jabber.org" 该消息将显示在聊天列表中,并显示会议室发送的重复消息“del@conference.jabber.org". 我被卡住了,为什么我收到重复的信息 public void setConnection(XMPPConnection connection) { this.connection = connection; if (connection != null) { PacketFilter

设备1向会议室发送消息时“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

也许你的聊天服务器也给你发了信息

所以您可以在
onClickListener
中手动添加一条消息,然后从服务器接收相同的消息


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

当您在MUC房间时,您会收到所有消息的副本,包括您自己的消息。 -“并将信息传达给每位乘客。”


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

我很确定MUC反映了消息。我把它作为练习留给OP来阅读XEP-45中的相关内容,如果我弄错了,请纠正我。谢谢kev,我阅读了一些关于MUC的文件,并且知道它将在会议室广播该消息。我通过消息匹配解决了我的问题。我面临着同样的问题。你能发布你的答案吗?@Pravin我也面临同样的问题。你是怎么解决的?