无法使用 asmack 获得加入的聊天室

Posted

技术标签:

【中文标题】无法使用 asmack 获得加入的聊天室【英文标题】:Unable to get Joined Chat Rooms using asmack 【发布时间】:2014-01-31 20:24:08 【问题描述】:

我的问题是我无法接收加入的聊天室。我正在使用 openfire 服务器 3.8.2 和 asmack 库 asmack-android-16.jar。当我调用 getJoinedRooms 函数时,我收到 item-not-found 错误。虽然我可以看到用户从管理控制台加入了房间。是服务器问题还是客户端问题或asmack的一些问题?请告诉我是否有人能够使用 openfire 和 asmack for android 加入聊天室。

这是我调用函数的方式:

Iterator RoomsIterator=MultiUserChat.getJoinedRooms(MyService.getConnection(),"user@192.168.1.3");

我也试过这个,但它没有给出响应表单服务器: 迭代器 RoomsIterator=MultiUserChat.getJoinedRooms(MyService.getConnection(),"user@192.168.1.3/Smack");

请帮我解决我的问题 提前致谢。

【问题讨论】:

【参考方案1】:

我通过在调用获取加入房间功能后添加数据包侦听器解决了我的问题。因为我得到一个空列表但是当我调试时我检查房间是否在服务器发送的结果 xml 节中返回因此我运行 asmack 的 getjoinedroom 函数,然后像这样手动添加 ha 数据包侦听器:

public void AddPacketListener()
PacketFilter filter = new IQTypeFilter(IQ.Type.RESULT);
MyService.getConnection().addPacketListener(new PacketListener() 
   
public void processPacket(Packet paramPacket) 

if(paramPacket.getFrom().equals(MyService.getConnection().getUser()))
        String xml=paramPacket.toXML();
        String from[];

        System.out.println(xml);
        from=paramPacket.getFrom().split("/");
            Pattern pattern = Pattern.compile("<item jid=\"(.*?)/>");
            Matcher matcher = pattern.matcher(xml);
            String parts[];

            Roomlist.clear();
            while (matcher.find())     

                parts=matcher.group(1).split("@");
                Roomlist.add(parts[0]);

                  
            return;         
            


,filter);

【讨论】:

以上是关于无法使用 asmack 获得加入的聊天室的主要内容,如果未能解决你的问题,请参考以下文章

具有所有者权限的多用户聊天室加入 android + asmack

无法使用 Beem-Asmack 在 XMPP FileTransfer 中处理上传

aSmack 错误:XMPPConnection 是抽象的;无法实例化

无法使用 Gtalk 应用程序的 asmack api 获取离线消息

如何在 asmack 中使用 PubSubManager 发布和解析

asmack + android + 聊天应用程序