我一直在尝试从MAM中获取存档消息,并使用smack api的内置功能来检索用户的所有存档消息,例如abc@xmpp.domain.com 使用queryArchive(...)及其所有其他重载的变体,它总是返回计数0
try {
if (lastMessageMamId == null) {
mamQueryResult = getArchivedMessages(mamManager,chat.getUser().getJid().toString(), PAGE_SIZE);
// mamQueryResult = mamManager.queryArchive(50);
} else {
mamQueryResult = mamManager.pageAfter(chat.getUser().getJid(), lastMessageMamId, PAGE_SIZE);
}
}
,它始终返回计数0作为使用
初始化mamManager的转发消息的结果org.jivesoftware.smackx.mam.MamManager mamManager
= org.jivesoftware.smackx.mam.MamManager.getInstanceFor(connection);
我还创建了一种方法,该方法通过创建带有start和end的自定义数据包来获取已归档的消息,我认为它也是由其他一些接受开始和结束日期的方法内部创建的(queryArchive(...))< / p>
public org.jivesoftware.smackx.mam.MamManager.MamQueryResult getArchivedMessages(org.jivesoftware.smackx.mam.MamManager mamManager, String jid, int maxResults) {
//MamManager mamManager = MamManager.getInstanceFor(connection);
try {
DataForm form = new DataForm(DataForm.Type.submit);
FormField field = new FormField(FormField.FORM_TYPE);
field.setType(FormField.Type.hidden);
field.addValue(MamElements.NAMESPACE);
form.addField(field);
//FormField formField = new FormField("with");
Calendar calendar = Calendar.getInstance();
calendar.get(Calendar.DAY_OF_MONTH-1);
FormField formField = new FormField("start");
formField.addValue("2010-06-07T00:00:00Z");
form.addField(formField);
FormField formField2 = new FormField("end");
formField2.addValue("2019-04-08T18:10:02.907Z");
form.addField(formField2);
RSMSet rsmSet = new RSMSet(maxResults);
return mamManager.page(form,rsmSet);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
但它也返回相同的计数0,但是我已经看到服务器上的存档表,其中包含消息,但是我不确定我缺少的是什么 我也尝试使用
查询妈妈mamQueryResult = mamManager.queryArchive(50);
但同样的问题
<iq id="H6q9q-60" type="set">
<query xmlns="urn:xmpp:mam:1" queryid="825e94c6-bd82-421e-b362-90072b421606">
<x xmlns="jabber:x:data" type="submit">
<field var="FORM_TYPE" type="hidden">
<value>urn:xmpp:mam:1</value>
</field>
<field var="start">
<value>2010-06-07T00:00:00Z</value>
</field>
<field var="end">
<value>2019-04-08T18:10:02.907Z</value>
</field>
</x>
<set xmlns="http://jabber.org/protocol/rsm">
<max>50</max>
</set>
</query>
</iq>
我也尝试过使用pageBefore(...)和pageAfter(...),但它们似乎也无法正常工作。 在这一点上,我不确定,我缺少什么,我需要做些什么。这是与服务器相关的问题,我也不确定。