在多用户聊天(Smack 4.3.0)中使用XEP-0045-1.21,我正在尝试查找是否已经创建了一个房间,但是我不确定自己在做什么是否正确办法。
我正在搜索它,而最相关的答案是does MUC exist?。
从技术上讲:
XXXXXX029d8c36b62259d0eXXXXXXXX
)中定义的ID。这意味着用户A可以使用B,C创建房间,并像上一个房间一样获得groupId
,但是用户B(在另一台设备中)可以尝试创建相同的房间(与用户A,B,C) ,这将给他同样的groupId
。Group Chat
并在需要时重新加入。
我现在在做什么:
@WorkerThread
public boolean isGroupChatAlreadyCreated(@NonNull final String groupId)
throws
XmppStringprepException,
XMPPException.XMPPErrorException,
MultiUserChatException.NotAMucServiceException,
SmackException.NotConnectedException,
InterruptedException,
SmackException.NoResponseException {
List<HostedRoom> hostedRooms = manager.getHostedRooms(JidCreate.domainBareFrom(serviceDomain));
for (HostedRoom hostedRoom : hostedRooms) {
if (hostedRoom.getName().equalsIgnoreCase(groupId)) {
return true;
}
}
return false;
}
其中manager
是MultiUserChatManager manager
,而serviceDomain
只是String
。
所以,问题:这是正确的方法吗?可以改善吗?
答案 0 :(得分:1)
这本质上是正确的方法。
理想情况下,您只需使用MulitUserChatManager.getRoomInfo(EntityBareJid)
。如果房间存在,该方法将返回一个RoomInfo
;如果房间不存在,则该方法返回。
还可以通过使用EntityBareJid
而非equals()
将'groupId'的类型更改为equalsIgnoreCase()
来改进您的原始方法。并将您的groupId作为MUC地址的Localpart。这样您的功能将变为:
public boolean isGroupChatAlreadyCreated(@NonNull final EntityBareJid groupId)
throws
XmppStringprepException,
XMPPErrorException,
NotAMucServiceException,
NotConnectedException,
InterruptedException,
NoResponseException {
List<HostedRoom> hostedRooms = manager.getHostedRooms(JidCreate.domainBareFrom(serviceDomain));
for (HostedRoom hostedRoom : hostedRooms) {
if (hostedRoom.getJid().equals(groupId)) {
return true;
}
}
return false;
}