首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适当的离开一个聊天室在smack Android

适当的离开一个聊天室在smack Android
EN

Stack Overflow用户
提问于 2015-04-22 15:13:05
回答 1查看 1.1K关注 0票数 1

在我的应用中,我正在使用下面的方法离开聊天室。

代码语言:javascript
复制
 public void leaveChatRoom(String username)
{
    Log.i("XMPP Chat Client", "User left chat room ");
    if(groupChat != null && groupChat.isJoined())
    {
        try {
            Presence leavePresence = new Presence(Presence.Type.unavailable);
            leavePresence.setTo("groupchat@conference.xxx/" + username);
            connection.sendPacket(leavePresence);
            groupChat.leave();


        } catch (NotConnectedException e) {
            e.printStackTrace();
        }
    }

}

要检查用户是否已加入,

代码语言:javascript
复制
public boolean isJoinedGroup(String username)
    {
        boolean isConnected = false;
        if(groupChat != null && groupChat.isJoined())
        {
            isConnected = true;
            Log.i("XMPP Chat Client", "Joined True");
        }
        return isConnected;
}

如果有一个成功的聊天服务器连接,这是很好的。但在某些情况下,聊天服务器连接会丢失。在这种情况下,我必须让用户离开聊天室,并再次自动加入。因此,当我失去聊天服务器连接时,我将重新连接到聊天服务器,并一起调用leaveChatRoom方法和join group方法。我将NotConnectedException放在行groupChat.leave();中,当我检查joined状态时,它总是返回true。当我检查openfire管理面板时,群聊占居者列表中没有用户。在这种情况下,我如何正确地将用户从群聊中删除?

EN

回答 1

Stack Overflow用户

发布于 2022-10-25 10:43:29

离开一个聊天室在smack Android - Kotlin

代码语言:javascript
复制
override fun leaveGroup(roomId: String, username: String) {
    if (connection.isConnectionEstablished()) {
        try {
            val mucJid = JidCreate.entityBareFrom("${roomId}.@conference.yourhost/${username}")
            val jid = JidCreate.from("${roomId}.@conference.yourhost/${username}")


            val manager = MultiUserChatManager.getInstanceFor(connection)
            val muc = manager.getMultiUserChat(mucJid)

            if (!muc.isJoined) {
                val nickName = Resourcepart.from(phone)
                muc.join(nickName)
            }


            val leavePresence = PresenceBuilder.buildPresence().ofType((Presence.Type.unavailable)).build()
            leavePresence.to = jid
            connection.sendStanza(leavePresence)
            muc.leave()

         
        } catch (e: NoResponseException) {
            e.printStackTrace()
        } catch (e: XMPPErrorException) {
            e.printStackTrace()
        } catch (e: NotConnectedException) {
            e.printStackTrace()
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29801865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档