我正在使用quickblox开发聊天,但是当我打开新聊天时遇到了一些问题。突然间,当我被连接时,我收到了其他用户发给我的所有消息。问题是,当我开始与用户A聊天时,我收到用户A聊天室中用户B,C,D ..的聊天。
我找到了只显示A用户的方法。但问题是服务器已经向我发送了“断开连接”的消息,所以当我开始与BI聊天时没有收到任何文本,因为用户B发送给我的消息已经发送(并省略),而我与用户A聊天。
如何接收待处理的消息(某种历史记录)或只是检索我登录的聊天消息?
我的一段代码:
// Create Connection.
Connection.DEBUG_ENABLED = true;
config = new ConnectionConfiguration(CHAT_SERVER);
connection = new XMPPConnection(config);
try {
connection.connect();
connection.login(chatLogin, password);
// Create Chat Manager.
chatManager = connection.getChatManager();
// Create Chat.
chat = chatManager.createChat(friendLogin, null);
// // Set listener for outcoming messages.
// chatManager.addChatListener(chatManagerListener);
// Accept only messages from
String from_messages = Integer.toString(receiver_chat_id);
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class),
new FromContainsFilter(from_messages+"-3758@chat.quickblox.com"));
// Collect these messages
PacketCollector collector = connection.createPacketCollector(filter);
Packet packet = collector.pollResult();
PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet) {
if (packet instanceof Message) {
Message msg = (Message) packet;
if(msg!=null){
// Process message
System.out.println("Rebem missatge: " +msg.getBody());
}
}
}
};
// Register the listener.
connection.addPacketListener(myListener, filter);
// Set listener for detect Receiver Status
if (connection.isConnected()){
roster = connection.getRoster();
roster.addRosterListener(new RosterListener() {
public void entriesDeleted(Collection<String> addresses) {}
public void entriesUpdated(Collection<String> addresses) {}
public void presenceChanged(Presence presence) {}
public void entriesAdded(Collection<String> arg0) {}
});
}
答案 0 :(得分:0)
制作一个arraylist并将接收的离线消息存储到该数组列表中。您可以在processPacket(数据包)功能中添加一个代码,以将传入的消息添加到数组列表中。或者您可以使用Multimaps(Google Guava)存储带密钥的所有传入消息。当您打开显示来自某个人的消息的活动时,您可以将该人的姓名与该密钥匹配(存储在多图中)并显示该特定人的消息。更好的选择是存储与特定人员的所有进入和外出消息聊天,以便您可以显示之前的所有聊天,然后打开活动。