//Can't get offline messages for asmack4.0.2
//对于asmack4.0.2不能获取离线消息
// The method can get offline messages now,messageCollector must be created before send packet,the problem is wrong code order
//现在下面这个方法可以获取离线消息,messageCollector一定要在发送包之前创建,是代码顺序的问题,修改后如下:
public List<Message> getMessages() throws NoResponseException, XMPPErrorException, NotConnectedException {
List<Message> messages = new ArrayList<Message>();
OfflineMessageRequest request = new OfflineMessageRequest();
request.setFetch(true);
PacketCollector messageCollector = connection.createPacketCollector(packetFilter);//before
connection.createPacketCollectorAndSend(request).nextResultOrThrow();//after
// Collect the received offline messages
Message message = (Message) messageCollector.nextResult();
while (message != null) {
messages.add(message);
message = (Message) messageCollector.nextResult();
}
// Stop queuing offline messages
messageCollector.cancel();
return messages;
}