aSmack + Android:MultiUserChat类; getMembers,getModerators等不工作?

时间:2012-07-10 19:30:03

标签: android xmpp asmack

我正在使用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());
    }
}

logcat的:

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

2 个答案:

答案 0 :(得分:3)

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

请尝试https://github.com/Flowdalic/asmack,因为您正在使用的版本在2年内未更新。

答案 1 :(得分:1)

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