【问题标题】:aSmack + Android : MultiUserChat class; getMembers, getModerators, etc not working?aSmack + Android:MultiUserChat 类; getMembers、getModerators 等不工作?
【发布时间】:2012-07-10 08:30:29
【问题描述】:

我正在使用 aSmack(Android 的 Smack 端口)连接到 XMPP 服务器(Openfire 3.7.1)并与之通信。只要使用 MultiUserChat 类发送消息,我就可以让多用户聊天工作。但是,调用任何列出房间居住者的方法都会失败。相关代码:

setDefaultConnection();
if(connection!=null) {
    mMuc = new MultiUserChat(connection, "hermitage_recycling@conference.jmartinw7");
    try {
        mMuc.join("chester");
        mMuc.getModerators();         //line 71
        ArrayList<Affiliate> dudes = new ArrayList<Affiliate>(mMuc.getMembers());
        Iterator<Affiliate> iter = dudes.iterator();
        while(iter.hasNext()) {
            Affiliate dude = iter.next();
            Log.w(this.getClass().getName(), dude.getNick());
        }
    } catch(XMPPException xmppe) {
        Log.w(this.getClass().getName(), "MUC error: "+xmppe.getMessage());
    }
}

日志猫:

07-10 13:38:56.248: ERROR/AndroidRuntime(13003): FATAL EXCEPTION: main
    java.lang.ClassCastException: org.jivesoftware.smack.util.PacketParserUtils$2
    at org.jivesoftware.smackx.muc.MultiUserChat.getOccupants(MultiUserChat.java:1797)
    at org.jivesoftware.smackx.muc.MultiUserChat.getModerators(MultiUserChat.java:1761)
    at org.apache.android.xmpp.XMPPClient$1.onClick(XMPPClient.java:71)
    at android.view.View.performClick(View.java:2532)

图书馆有问题还是我做错了什么? getOc​​cupants() 似乎有效。

MultiUserChat 示例和 javadocs:
http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/
http://www.igniterealtime.org/builds/smack/docs/latest/documentation/extensions/index.html

aSmack:
http://code.google.com/p/asmack/
http://code.google.com/p/asmack/issues/detail?id=72

【问题讨论】:

  • 你有什么解决办法吗??

标签: android xmpp asmack


【解决方案1】:

我相信您的问题是由 asmack 未能加载 smack.providers 文件引起的,该文件告诉 asmack 要加载哪些类。如果您阅读自述文件,它描述了如何将 smack.providers 文件加载到 asmack 中(感谢 Flow)。您需要在开始任何 XMPP 活动之前执行此操作。

试试https://github.com/Flowdalic/asmack,因为你正在使用的版本已经2年没有更新了。

【讨论】:

  • 切换到版本 7(最新 jar)后问题仍然存在。
  • @moonlightcheese 您是否阅读了README 并按照有关 ProviderManager 的说明进行操作?
  • @Flow 如果您想要信任,请提供此作为答案,以便我接受。谢谢,这解决了。
【解决方案2】:

请阅读aSmack 的README 并按照有关ProviderManager 的说明进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 2021-12-20
    • 2013-03-08
    • 2016-04-24
    • 1970-01-01
    • 2012-09-25
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多