【问题标题】:How to get DiscussionHistory for MultiUserChat room using aSmack?如何使用 aSmack 获取 MultiUserChat 房间的 DiscussionHistory?
【发布时间】:2013-04-05 10:42:44
【问题描述】:

如何从MultiUserChat 获取MUC 房间的讨论历史?我可以使用 aSmack 库创建 MultiUserChat 实例和房间,现在我想显示房间中发生的所有先前对话。

任何有相同经验的人请帮助我。我在 Google 上搜索了很多关于此的内容,但我仍然没有得到任何适当的文档/解释。

【问题讨论】:

    标签: android xmpp smack asmack


    【解决方案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,因为除非有另一条消息可用,否则它不会返回。这将需要中断来停止等待,这会使事情变得更加复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多