2

XMPPサーバー(Openfire 3.7.1)に接続して通信するためにaSmack(Android用のSmackポート)を使用しています。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 の例と javadoc:
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

4

2 に答える 2

3

あなたの問題は、asmackがどのクラスをロードするかをasmackに指示するsmack.providersファイルをロードできないことが原因であると思います。READMEを読むと、smack.providersファイルをasmack(Thanks Flow)にロードする方法が説明されています。XMPPアクティビティを開始する前に、これを行う必要があります。

作業中のバージョンが2年間更新されていないため、https://github.com/Flowdalic/asmackを試してください。

于 2012-07-10T20:04:36.620 に答える
1

aSmackのREADMEを読み、ProviderManager に関する指示に従ってください。

于 2012-07-11T17:52:01.417 に答える