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

时间:2014-01-31 20:24:09

标签: android asmack chatroom multiuserchat

我的问题是我无法接收加入的聊天室。我正在使用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");

我也试过这个,但它没有给出服务器的响应:     Iterator RoomsIterator = MultiUserChat.getJoinedRooms(MyService.getConnection(),“user@192.168.1.3/Smack”);

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

1 个答案:

答案 0 :(得分:1)

我通过在调用get join rooms函数后添加数据包监听器解决了我的问题。因为我得到一个空列表但是当我调试时我检查房间是否返回由服务器发送的结果xml stanze因此我运行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);

}