【问题标题】:Receiving multiple messages after sending in group chat using asmack使用 asmack 在群聊中发送后收到多条消息
【发布时间】:2016-05-11 13:43:03
【问题描述】:

在发送消息后,它正在接收到该组。但与此同时,我又收到了所有以前的消息。帮我解决这个问题。 这是我的代码:

send.setOnClickListener(new View.OnClickListener() {            
    public void onClick(View view) {
        to = groupname + "@conference.localhost".toString();
        String text = (textMessage.getText().toString());
        textMessage.setText("");

        muc = new MultiUserChat(connection, to);

        try {
            muc.join(USERNAME);
        } catch (XMPPException e) {
            e.printStackTrace();
        }

        Message msg = new Message(to, Message.Type.groupchat);
        msg.setBody(text);
        if (connection != null) {
            connection.sendPacket(msg);
            Msg data = new Msg();
            data.setMessage(text);
            data.setName(userFrom);
            data.setDate(DateAndTime.getCurrentDate());
            data.setTime(DateAndTime.getCurrentTime());
            data.setSender(true);
            MessageListAdapter.messagesItems.add(data);
            notifyMyAdapter();
        }
    }
});

这是我的接收代码:

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());
                 Log.i("XMPPChatDemoActivity ", " Text Recieved " + message.getBody() + " from " + fromName);
                    Msg data = new Msg();
                    String subject = message.getSubject();

                    if (subject == null) {
                        data.setMessage(message.getBody());
                        data.setName(NAME);
                        data.setDate(DateAndTime.getCurrentDate());
                        data.setTime(DateAndTime.getCurrentTime());
                        data.setSender(false);
                        MessageListAdapter.messagesItems.add(data);

                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            notifyMyAdapter();
                        }
                    });
                } else if (subject.equals("")){
                    data.setMessage(message.getBody());
                    data.setName(NAME);
                    data.setDate(DateAndTime.getCurrentDate());
                    data.setTime(DateAndTime.getCurrentTime());
                    data.setSender(false);
                    MessageListAdapter.messagesItems.add(data);
                    // Add the incoming message to the list view
                    mHandler.post(new Runnable() {
                        public void run() {
                            notifyMyAdapter();
                        }
                    });
                }
            }
        }

        },filter);
    }

}

【问题讨论】:

    标签: android xmpp asmack


    【解决方案1】:

    MultiUserChat 中,要控制加入房间时接收的历史记录数量,您需要提供一个已配置的DiscussionHistory 对象。有关MultiUserChatrefer this的更多信息

    muc.join(String nickname, String password, DiscussionHistory history, long timeout)
    

    其中DiscussionHistory 类控制字符数 或进入房间时收到的消息。房间将决定 如果您不指定要返回的历史记录数量 DiscussionHistory 加入房间时。更多信息refer this

    例子:

    MultiUserChat muc = new MultiUserChat(connection, to);
    DiscussionHistory history = new DiscussionHistory(); history.setMaxStanzas(0);
    muc.join("username", "password", history, SmackConfiguration.getPacketReplyTimeout());
    

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 2014-12-18
      • 2014-09-19
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多