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);
}
具體如何展現這個列表就看大家的需求了,下一篇會寫如何創建聊天室的方法,畢竟篇幅多了大家看著會煩躁