Android IQ自定义扩展(smack-4.1.9)
Android IQ自定义扩展(smack-4.1.9)
本文是基于smack-4.1.9上的IQ自定义扩展。别的版本如有区别应该也是在继承IQ后,重写方法上的区别。
首先,来看看需要扩展的IQ的格式
<iq type="set" to="089eb8e3-dca8-40a3-90e8-aa560099ab45@conference.win-arbj87ei5km" id="089eb8e3-dca8-40a3-90e8-aa560099ab45">//查询节点<query xmlns="http://jabber.org/protocol/muc#owner">//销毁节点<destroy id="dispose">//销毁的原因节点<reason>{"optUser" : "李俊超","Function" : "Func_DeleteRoom","RoomName" : "铭","OptId" : "04eb8257-927b-4605-94a5-aa0d00996bf1"}</reason></destroy></query></iq>
接下来,新建IQMessage ,继承IQ
相关注释已在代码里面标注。
import org.jivesoftware.smack.packet.IQ;public class IQMessage extends IQ {private String groupId,groupName,userId,userName;/**** @param childElementName 代表query节点* @param childElementNamespace 代表query节点的xmlns* @param groupId 群id* @param groupName 群名称* @param userId 操作者id* @param userName 操作者名称*/public IQMessage(String childElementName, String childElementNamespace,String groupId, String groupName,String userId,String userName){super(childElementName,childElementNamespace);this.groupId = groupId;this.groupName = groupName;this.userId = userId;this.userName = userName;}/**** @param xml IQ格式拼接* @return*/@Overrideprotected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {xml.rightAngleBracket(); //">"括号xml.append("<destroy id=\"dispose\" >").append("<reason>{" +" \"optUser\" : \""+userName+"\"," +" \"Function\" : \"Func_DeleteRoom\"," +" \"RoomName\" : \""+groupName+"\"," +" \"OptId\" : \""+userId+"\"" +" }").append("</reason>").append("</destroy>");//以上都是数据格式的拼接return xml;}}
紧接着,看看上层对自定义IQ的调用
/*** 解散群聊* @param toUserID* @param loginUserId*/private void deleteGroup(final String toUserID,String loginUserId){try {String userName = AppPrefs.get(this).getChatLogn().UserName;//XmppConfig.sendIqDeleteGroupUser(mContext,toUserID,groupName,loginUserId,userName);IQMessage msg = new IQMessage("query","http://jabber.org/protocol/muc#owner", groupId, groupName, loginUserId, userName);msg.setTo(groupId+"@conference.win-arbj87ei5km"); //设置iq节点里面的tomsg.setStanzaId(groupId); //设置iq节点里面的iqmsg.setType(IQ.Type.set); //设置iq节点里面的typeXmppConfig.getInstance(mContext).sendStanza(msg); //消息发送deleteGroupHistory(toUserID,loginUserId);} catch (Exception e) {Log.e("deleteGroup","Exception: "+e.toString());}}
最后我们可以通过msg.toXML()来查看扩展拼接后的IQ格式。
<iq to='1fbb140c-30ef-4afc-b54d-aa5a00f0192f@conference.win-arbj87ei5km' id='1fbb140c-30ef-4afc-b54d-aa5a00f0192f' type='set'><query xmlns='http://jabber.org/protocol/muc#owner'><destroy id="dispose" ><reason>{ "optUser" : "xiejinbo", "Function" : "Func_DeleteRoom", "RoomName" : "room_xiejinbo", "OptId" : "2ace1328-24f4-4efc-9839-aa1b00db5181" }</reason></destroy></query></iq>
Android IQ自定义扩展(smack-4.1.9)相关推荐
- android怎么设置适配器,Android之自定义实现BaseAdapter(通用适配器三)
在上一篇中,我们说过,在setData中如果有很多控件的话,我们还是要在该方法中写入很多代码,为了降低开发的方便性,本次就在此基础上再一次优化.实现原理是这样的,每次在setData中都要查找控件,然 ...
- 适用于 Visual Studio 的 Android 游戏开发扩展
在 Windows 计算机上设置 Android 游戏开发扩展并在 Android 设备或模拟器上运行示例 Visual Studio C++ 项目. 先决条件 按照本节中的步骤准备您的 Window ...
- android CameraX自定义相机使用
android CameraX自定义相机使用 =<?xml version="1.0" encoding="utf-8"?> <android ...
- VS Code 安装 Go 插件、自定义扩展配置、断点调试
1. 安装插件 使用快捷键 Ctrl+Shift+X 打开插件安装页面,安装 Go 插件. 2. 自定义扩展配置 使用快捷键 Ctrl+, 打开自定义配置页,编辑 settings.json ,定义与 ...
- Android ListView 自定义背景后 滚动时的背景变黑问题
ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉,原因是,滚动时,列表里面的view重绘时,用的依旧 ...
- android 实现自定义监听接口,Android在自定义类中实现自定义监听器方式
Android在自定义类中实现自定义监听器方式 发布时间:2020-08-31 06:19:39 来源:脚本之家 阅读:203 作者:Simon_Qi 监听器可以说是Android开发中最常用的东西之 ...
- android sqlite自定义函数,Android中自定义一个View的方法详解
本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...
- android+自定义皮肤,android studio自定义更换皮肤详细图文教程
android studio这款app程序开发软件内也内置了多种皮肤主题,程序开发人员如果感觉一种皮肤太过单调乏味,可以选择使用软件内的其他皮肤风格,软件默认的皮肤是IntelliJ,还有黑色的Dra ...
- android 自定义搜索框edittext,Android编程自定义搜索框实现方法【附demo源码下载】...
本文实例讲述了Android编程自定义搜索框实现方法.分享给大家供大家参考,具体如下: 先来看效果图吧~ 分析:这只是模拟了一个静态数据的删除与显示 用EditText+PopupWindow+lis ...
最新文章
- 双节棍「大师」鱼佬亲传武功秘籍:如何进行一场数据挖掘算法竞赛?
- 你能用微信小程序打开小程序了【附开发方法】
- java 无符号 类型_java中符号类型和无符号类型的问题分析
- java闭包lambda,闭包在groovy vs闭包在java 8(lambda表达式)?
- Git之深入解析在没有合适的网络或者可共享仓库情况下的git bundle打包操作
- linux使jdk开机可用_JDK 11的一般可用性
- 最新nacos安装教程(windows版)
- 数据分析没价值?——深思对业务的洞察有多少?
- JavaScript函数—JavaScript闭包
- Reacr-Native Android 环境搭建 、运行项目(二)Window
- 中科院计算所培训中心新一期javascript培训结束
- VB6连接各种类型的数据库
- 总结Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fitting
- SpringBoot + Vue 前后端分离的小案例
- typora 修改块代码 和 代码块的背景色
- Cadence 导出变种BOM详细操作方法
- Dubbo基础篇_06_Dubbo监控中心的介绍与简易监控中心的安装
- python获取摄像头数据_用Python获取摄像头并实时控制人脸 !
- 机器学习 线性回归算法_探索机器学习算法简单线性回归
- NRF24L01的配置详解
热门文章
- TD Target Algorithms
- CNC加工中心的G代码详细解析
- 【架构实践】全链路实时追踪系统架构实战: 链路追踪系统 Tracing Analysis System
- 智慧农业物联网常见项目应用
- 谷歌面试时的这道疯狂的问题,你都能答出来么?
- jQuery的综合应用
- codeforces D. Boboniu Chats with Du
- STM32G431+P-NUCLEO-IHM03开发套件调试3(p-nucleo-ihm03套件)-FOC基础原理介绍
- 查询固定字数或超过某个字数的数据
- 有道云笔记+Everything+Typora+GitHub图床+PicGo+jsDelivr加速+截图工具——创造丝滑免费的Markdown写作环境