aSmack + Android: класс MultiUserChat; getMembers, getModerators и т. д. не работают?

я использую aSmack (порт Smack для Android) для подключения и связи с сервером XMPP (Openfire 3.7.1). я могу заставить многопользовательский чат работать до отправки сообщений с помощью класса MultiUserChat. однако вызов любого метода, который перечисляет обитателей комнаты, завершается ошибкой. соответствующий код:

setDefaultConnection();
if(connection!=null) {
    mMuc = new MultiUserChat(connection, "[email protected]");
    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)

что-то не так с библиотекой или я что-то не так делаю? getOccupants() работает.

Пример 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/< br> http://code.google.com/p/asmack/issues/detail?id=72


person moonlightcheese    schedule 10.07.2012    source источник
comment
у тебя есть решение??   -  person CoronaPintu    schedule 23.06.2015


Ответы (2)


Пожалуйста, прочтите README в aSmack и следуйте инструкциям ProviderManager.

person Flow    schedule 11.07.2012

Я считаю, что ваша проблема вызвана тем, что asmack не может загрузить файл smack.providers, который сообщает asmack, какие классы загружать. Если вы читали README, там описано, как загрузить файл smack.providers в asmack (спасибо Flow). Это необходимо сделать перед началом любой активности XMPP.

Попробуйте https://github.com/Flowdalic/asmack, так как версия, над которой вы работаете, не была обновлено за 2 года.

person Jug6ernaut    schedule 10.07.2012
comment
проблема сохраняется после перехода на версию 7 (последняя банка). - person moonlightcheese; 11.07.2012
comment
@moonlightcheese Вы прочитали README и следовали инструкциям по ProviderManager? ? - person Flow; 11.07.2012
comment
@Flow, если вам нужен кредит, предоставьте это как ответ, чтобы я мог его принять. спасибо, это решило это. - person moonlightcheese; 11.07.2012