使用 asmack 在群聊中发送后收到多条消息
Posted
技术标签:
【中文标题】使用 asmack 在群聊中发送后收到多条消息【英文标题】:Receiving multiple messages after sending in group chat using 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);
【问题讨论】:
【参考方案1】:在MultiUserChat
中,要控制加入房间时接收的历史记录数量,您需要提供一个已配置的DiscussionHistory
对象。有关MultiUserChat
refer 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());
【讨论】:
以上是关于使用 asmack 在群聊中发送后收到多条消息的主要内容,如果未能解决你的问题,请参考以下文章
在群聊中,新消息事件(websocket)应该由客户端发送还是API发送?