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)相关推荐

  1. android怎么设置适配器,Android之自定义实现BaseAdapter(通用适配器三)

    在上一篇中,我们说过,在setData中如果有很多控件的话,我们还是要在该方法中写入很多代码,为了降低开发的方便性,本次就在此基础上再一次优化.实现原理是这样的,每次在setData中都要查找控件,然 ...

  2. 适用于 Visual Studio 的 Android 游戏开发扩展

    在 Windows 计算机上设置 Android 游戏开发扩展并在 Android 设备或模拟器上运行示例 Visual Studio C++ 项目. 先决条件 按照本节中的步骤准备您的 Window ...

  3. android CameraX自定义相机使用

    android CameraX自定义相机使用 =<?xml version="1.0" encoding="utf-8"?> <android ...

  4. VS Code 安装 Go 插件、自定义扩展配置、断点调试

    1. 安装插件 使用快捷键 Ctrl+Shift+X 打开插件安装页面,安装 Go 插件. 2. 自定义扩展配置 使用快捷键 Ctrl+, 打开自定义配置页,编辑 settings.json ,定义与 ...

  5. Android ListView 自定义背景后 滚动时的背景变黑问题

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉,原因是,滚动时,列表里面的view重绘时,用的依旧 ...

  6. android 实现自定义监听接口,Android在自定义类中实现自定义监听器方式

    Android在自定义类中实现自定义监听器方式 发布时间:2020-08-31 06:19:39 来源:脚本之家 阅读:203 作者:Simon_Qi 监听器可以说是Android开发中最常用的东西之 ...

  7. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

  8. android+自定义皮肤,android studio自定义更换皮肤详细图文教程

    android studio这款app程序开发软件内也内置了多种皮肤主题,程序开发人员如果感觉一种皮肤太过单调乏味,可以选择使用软件内的其他皮肤风格,软件默认的皮肤是IntelliJ,还有黑色的Dra ...

  9. android 自定义搜索框edittext,Android编程自定义搜索框实现方法【附demo源码下载】...

    本文实例讲述了Android编程自定义搜索框实现方法.分享给大家供大家参考,具体如下: 先来看效果图吧~ 分析:这只是模拟了一个静态数据的删除与显示 用EditText+PopupWindow+lis ...

最新文章

  1. 双节棍「大师」鱼佬亲传武功秘籍:如何进行一场数据挖掘算法竞赛?
  2. 你能用微信小程序打开小程序了【附开发方法】
  3. java 无符号 类型_java中符号类型和无符号类型的问题分析
  4. java闭包lambda,闭包在groovy vs闭包在java 8(lambda表达式)?
  5. Git之深入解析在没有合适的网络或者可共享仓库情况下的git bundle打包操作
  6. linux使jdk开机可用_JDK 11的一般可用性
  7. 最新nacos安装教程(windows版)
  8. 数据分析没价值?——深思对业务的洞察有多少?
  9. JavaScript函数—JavaScript闭包
  10. Reacr-Native Android 环境搭建 、运行项目(二)Window
  11. 中科院计算所培训中心新一期javascript培训结束
  12. VB6连接各种类型的数据库
  13. 总结Learning Efficient Single-stage Pedestrian Detectors by Asymptotic Localization Fitting
  14. SpringBoot + Vue 前后端分离的小案例
  15. typora 修改块代码 和 代码块的背景色
  16. Cadence 导出变种BOM详细操作方法
  17. Dubbo基础篇_06_Dubbo监控中心的介绍与简易监控中心的安装
  18. python获取摄像头数据_用Python获取摄像头并实时控制人脸 !
  19. 机器学习 线性回归算法_探索机器学习算法简单线性回归
  20. NRF24L01的配置详解

热门文章

  1. TD Target Algorithms
  2. CNC加工中心的G代码详细解析
  3. 【架构实践】全链路实时追踪系统架构实战: 链路追踪系统 Tracing Analysis System
  4. 智慧农业物联网常见项目应用
  5. 谷歌面试时的这道疯狂的问题,你都能答出来么?
  6. jQuery的综合应用
  7. codeforces D. Boboniu Chats with Du
  8. STM32G431+P-NUCLEO-IHM03开发套件调试3(p-nucleo-ihm03套件)-FOC基础原理介绍
  9. 查询固定字数或超过某个字数的数据
  10. 有道云笔记+Everything+Typora+GitHub图床+PicGo+jsDelivr加速+截图工具——创造丝滑免费的Markdown写作环境