XMPP系列之Smack(4.1.3 )(三)获取已加入的聊天室列表

XMPP系列之Smack(4.1.3)(一)登录服务器
XMPP系列之Smack(4.1.3)(二)获取好友分组
XMPP系列之Smack(4.1.3 )(四)创建聊天室
本篇讲述如何获取openfire服务器上已加入的聊天室列表,期间事情比较多所以间隔有点远,最近闲下来继续做这个计划已久的XMPP项目。

获取列表很简单,几行代码就能搞定,主要通过获取MultiUserChatManager这个类来获得我们所需要的东西,这个类继承一个抽象类ManagerManager中主要实现了获取XMPPConnection这个连接对象,所以实例化时不能通过new的方式,具体实例化方式如下

XMPPTCPConnection connection = XMPPConnectionManager.getInstance().getConnection();
MultiUserChatManager mMultiUserChatManager = MultiUserChatManager.getInstanceFor(connection);

拿到mMultiUserChatManager对象之后调用以下方法即可获取所加入的所有的房间列表,这里返回的是一个List集合,里面存放的是entity ID

XMPP系列之Smack(4.1.3 )(三)获取已加入的聊天室列表_第1张图片
Paste_Image.png

接着还要再调用getRoomInfo这个方法来获取具体的房间名

XMPP系列之Smack(4.1.3 )(三)获取已加入的聊天室列表_第2张图片
Paste_Image.png

这里贴出我的代码来做个示范

List tempRoomList = mMultiUserChatManager.getJoinedRooms(mUserVo.jid);
            for (String roomId : tempRoomList) {
                RoomInfo roomInfo = mMultiUserChatManager.getRoomInfo(roomId);
                GroupEntityVo groupVo = new GroupEntityVo();
                groupVo.roomJid = roomInfo.getRoom();
                groupVo.roomName = roomInfo.getName();
                mGroupList.add(groupVo);
            }

我把获得的聊天室的信息做了进一步封装,统一放到List中管理。
如果想要获得服务器上所有的聊天室列表可以调用下面的方法

List hostedRoomList = mMultiUserChatManager.getHostedRooms(mMultiUserChatManager.getServiceNames().get(0));
            for (HostedRoom room : hostedRoomList) {
                String roomName = room.getName();
                String roomJid = room.getJid();
                GroupEntityVo groupVo = new GroupEntityVo();
                groupVo.roomJid = roomJid;
                groupVo.roomName = roomName;
                mGroupList.add(groupVo);
            }

具体如何展现这个列表就看大家的需求了,下一篇会写如何创建聊天室的方法,毕竟篇幅多了大家看着会烦躁

你可能感兴趣的:(XMPP系列之Smack(4.1.3 )(三)获取已加入的聊天室列表)