XMPP系列之Smack(4.1.3)(一)登录服务器
XMPP系列之Smack(4.1.3)(二)获取好友分组
XMPP系列之Smack(4.1.3 )(四)创建聊天室
本篇讲述如何获取openfire服务器上已加入的聊天室列表,期间事情比较多所以间隔有点远,最近闲下来继续做这个计划已久的XMPP项目。
获取列表很简单,几行代码就能搞定,主要通过获取MultiUserChatManager
这个类来获得我们所需要的东西,这个类继承一个抽象类Manager
,Manager
中主要实现了获取XMPPConnection
这个连接对象,所以实例化时不能通过new的方式,具体实例化方式如下
XMPPTCPConnection connection = XMPPConnectionManager.getInstance().getConnection();
MultiUserChatManager mMultiUserChatManager = MultiUserChatManager.getInstanceFor(connection);
拿到mMultiUserChatManager
对象之后调用以下方法即可获取所加入的所有的房间列表,这里返回的是一个List集合,里面存放的是entity ID
Paste_Image.png
接着还要再调用getRoomInfo
这个方法来获取具体的房间名
Paste_Image.png
这里贴出我的代码来做个示范
List<String> 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<GroupEntityVo>中管理。
如果想要获得服务器上所有的聊天室列表可以调用下面的方法
List<HostedRoom> 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);
}
具体如何展现这个列表就看大家的需求了,下一篇会写如何创建聊天室的方法,毕竟篇幅多了大家看着会烦躁