如何使用 aSmack 获取 MultiUserChat 房间的 DiscussionHistory?
Posted
技术标签:
【中文标题】如何使用 aSmack 获取 MultiUserChat 房间的 DiscussionHistory?【英文标题】:How to get DiscussionHistory for MultiUserChat room using aSmack? 【发布时间】:2013-04-05 10:42:44 【问题描述】:如何从MultiUserChat
获取MUC 房间的讨论历史?我可以使用 aSmack 库创建 MultiUserChat 实例和房间,现在我想显示房间中发生的所有先前对话。
任何有相同经验的人请帮助我。我在 Google 上搜索了很多关于此的内容,但我仍然没有得到任何适当的文档/解释。
【问题讨论】:
【参考方案1】:DiscussionHistory history = new DiscussionHistory();
history.setSince(date);
muc.join(nickname, null, history, SmackConfiguration.getReplyTimeout());
// Get historical message;
Message oldMsg = muc.nextMessage(timeout);
你也可以使用
history.setMaxChars()
history.setMaxStanzas()
history.setSeconds()
一些示例在测试代码中。检查测试testDiscussionHistory。
http://fisheye.igniterealtime.org/browse/smack/trunk/test/org/jivesoftware/smackx/muc/MultiUserChatTest.java?hb=true
【讨论】:
这里需要为 MUC 维护相同的实例,或者我们可以创建任何我们想要的。如果单个实例需要如何在整个应用程序中将该 MUC 维护为单个实例。 在这里,通过使用您的代码,我只收到来自历史记录的一条消息(即第一条消息)。即使我设置了history.setMaxStanzas(20)
。我想从这段历史中获得最后 20 条消息。请帮助我。
您只需多次调用 nextMessage 即可。每次调用都会检索下一条消息。最终,您将检索所有历史消息并阻止等待下一个实时消息。
我这里有一个问题,当我进入一个房间时,我正在正确获取该房间的历史记录。当我立即从那个房间去另一个房间时,我在这条线上得到了 NPE Message oldMsg = muc.nextMessage(timeout);
如何避免即使用户随时进入不同的房间..还有 timeout
这里的最佳价值是什么跨度>
这取决于应用程序。只需检查 null 的返回值。如果你想无限期地阻塞,你可以调用不带参数的 nextMessage() 。这永远不会返回 null,因为除非有另一条消息可用,否则它不会返回。这将需要中断来停止等待,这会使事情变得更加复杂。以上是关于如何使用 aSmack 获取 MultiUserChat 房间的 DiscussionHistory?的主要内容,如果未能解决你的问题,请参考以下文章
Android with Asmack - 当我连接到 XMPP 时如何获取当前状态信息?
如何在 Android aSmack 中实现 DeliveryReceiptManager