как получить список присоединившихся групп и информацию об их участниках с помощью XMPP?

Чтобы получить список присоединенных комнат, я пробовал:

getJoinedRooms(connection, "[email protected]");// line:213

Iterator<String> rooms = MultiUserChat.getJoinedRooms(conn, userJID);// line:689

    //System.out.println("ROOM:"+rooms);
      while (rooms.hasNext()) {

          System.out.println("Room list: "+new DiscoverItems.Item(rooms.next()).toString());;

      }

но это дает NPE. Итак, как я могу получить список присоединившихся групп? На моей стороне сервера есть 1 присоединенная группа, в которой 3 участника являются участниками. Логкат:

 I/System.out(948): Room: join 
 W/System.err(948): java.lang.NullPointerException
 W/System.err(948): at org.jivesoftware.smackx.muc.MultiUserChat.getJoinedRooms(MultiUserChat.java:180)
 W/System.err(948): at org.apache.android.xmpp.XMPPClient.getJoinedRooms(XMPPClient.java:689)
 W/System.err(948): at org.apache.android.xmpp.XMPPClient$4.onClick(XMPPClient.java:213)
 W/System.err(948): at android.view.View.performClick(View.java:4084)
 W/System.err(948): at android.view.View$PerformClick.run(View.java:16966)
 W/System.err(948): at android.os.Handler.handleCallback(Handler.java:615)
 W/System.err(948): at android.os.Handler.dispatchMessage(Handler.java:92)
 W/System.err(948): at android.os.Looper.loop(Looper.java:137)
 W/System.err(948): at android.app.ActivityThread.main(ActivityThread.java:4745)
 W/System.err(948): at java.lang.reflect.Method.invokeNative(Native Method)
 W/System.err(948): at java.lang.reflect.Method.invoke(Method.java:511)
 W/System.err(948): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
 W/System.err(948): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
 W/System.err(948): at dalvik.system.NativeStart.main(Native Method)

Чтобы получить RoomInfo, я пробовал:

RoomInfo info = null;
    try {
        info = MultiUserChat.getRoomInfo(conn,chatRoomName);
    } catch (XMPPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("Number of occupants:" + info.getOccupantsCount()); 

Как получить все детали участников, такие как их псевдоним, JID, владелец в присоединенной группе? Я пробовал почти все решения от SO. Любая помощь будет оценена по достоинству!


person Bhoomika Brahmbhatt    schedule 23.10.2013    source источник
comment
Вы также должны опубликовать NPE и его трассировку стека.   -  person Flow    schedule 23.10.2013
comment
@Flow Показывает только одну строку, когда я вызываю этот метод, который java.lang.NullPointerException   -  person Bhoomika Brahmbhatt    schedule 23.10.2013
comment
Каждое исключение в Java сопровождается трассировкой стека, которая обычно также регистрируется, поскольку предоставляет ценную информацию о том, что именно произошло. Исключения журнала aSmack и Android с полной трассировкой стека, которая обычно порождает несколько строк в журнале. Попробуйте получить эту информацию и предоставить ее. В противном случае вам будет трудно помочь, потому что выбрасывать NPE недостаточно информации без какого-либо контекста.   -  person Flow    schedule 23.10.2013
comment
Я использовал try & catch, чтобы получить этот список. Просто это происходит в случае с Catch и показывает, что одна строка. Я видел много вопросов о SO относительно NPE в объединенном списке. Но нет удовлетворительного ответа.   -  person Bhoomika Brahmbhatt    schedule 23.10.2013
comment
Почему проголосовали? Любая причина.   -  person Bhoomika Brahmbhatt    schedule 23.10.2013
comment
Потому что ваш вопрос не содержит достаточно информации. Вы не предоставляете NPE трассировку стека и не упоминаете используемую версию aSmack. В нынешнем виде почти невозможно помочь вам и бесполезно для других пользователей.   -  person Flow    schedule 23.10.2013
comment
@Flow, ты видишь мой отредактированный вопрос.   -  person Bhoomika Brahmbhatt    schedule 24.10.2013


Ответы (1)


У меня тоже не сработало. Что я сделал, так это добавил список пользователей, разделенных запятыми, при отправке приглашения.

muc.invite(friendsJID, friendsJIDsList.toString());

И по приглашению Получить

public void invitationReceived(Connection conn, String room, String inviter, String reason, String password,
        Message message) {

List<String> list = Arrays.asList(reason.split("\\s*,\\s*"));

Этот список содержит все идентификаторы пользователей в группе, и с его помощью я получаю Vcards пользователей. Надеюсь это поможет.

person Kishath    schedule 06.01.2015