一旦有了花名册,我就可以遍历所有成员并使用MamManager查询
mamManager.mostRecentPage(jid, QUERY_META_DATA_PAGE_SIZE)
但是,这一次只能让我一次获取一次jid的数据,这意味着如果用户有1000个连接,则我必须进行1000个网络呼叫。有什么方法可以获取有关多个jid的最新消息?
编辑
因此,我已将smack的版本从4.2.3更新到4.3,以获取最新的api,我仍然可以找到一种方法来执行我想要的查询而无需遍历jids
for (int i = 0; i < jidList.size(); i++) {
MamQueryArgs mamQueryArgs = MamQueryArgs.builder()
.setResultPageSize(1)
.limitResultsToJid(jidList.get(i))
.queryLastPage().build();
MamQuery mamQuery = mamManager.queryArchive(mamQueryArgs);
}
因此,在首次登录新用户时,我将在服务器上访问1000次
编辑2
实际上,第一次查询时,上面的查询什么都不返回,可能是因为本地存档为空,所以我必须执行以下操作:
for (Jid : jidList) {
MamQuery mamQuery = mamManager.queryMostRecentPage(jid, 1);
}
答案 0 :(得分:1)
有什么办法可以获取多个短消息的最新消息吗?
与您的帖子标题“获取所有花名册成员的最新消息”中的问题不同,不是吗?但是我相信两个问题的答案都是相同的。邮件存档管理(XEP-0313)查询查询存档。 'jid'参数仅将结果限制为仅包含具有该JID的消息。
如果您查询本地用户档案(常见情况),则可以使用Smack和
来查询最后的X条消息。MamQueryArgs mamQueryArgs = MamQueryArgs.builder()
.setResultPageSize(<X>)
.queryLastPage()
.build();
MamQuery mamQuery = mamManager.queryArchive(mamQueryArgs);
有关更多信息,请查看MamManager
's javadoc。