如何使用 Smack 通过 XMPP 设置/获取配置文件数据

2024-04-23

我正在 Android 上使用 Smack 库开发 XMPP 客户端。花名册/消息/状态等内容运行得很好。然而,我没有找到一种方法来存储额外的个人资料信息(用户图片、狗的名字……)。

我从谷歌搜索中看到的唯一方法是使用 VCard。但它根本不起作用。我尝试了以下方法:

        VCard vCard = new VCard();
        vCard.load(connection);
        vCard.setEmailHome("[email protected] /cdn-cgi/l/email-protection");
        vCard.setLastName("Scheller");
        vCard.setField("blafasel", "asdf");
        vCard.save(connection);

然后我正在寻找一种查看 VCard 信息的方法。它既没有出现在 iChat 中,也没有出现在这个 System.out 中:

        vCard.load(connection, user);
        System.out.println(user + " has this vCard: " + vCard.toXML());

所以出了什么问题,但没有迹象表明出了什么问题。我用 google talk 服务器和我自己的 openfire 副本进行了尝试,得到了相同的结果。顺便说一句,我正在使用这个版本的 Smack:http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/ http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/

我在这里做错了什么?使用 Smack 存储个人资料相关信息的正确方法是什么?


我已经检查了 Smack 的源代码,并使用调试器以及使用 Smack 调试窗口浏览了重要部分。问题出在 VCard 实现内部斯马克API http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smackx/packet/VCard.html。保存 VCard 确实可以按描述工作,但加载已损坏。

parseIQ(XmlPullParser parser) 是 PacketReader.java 类的一部分,处理不同类型的包。它仅处理具有以下命名空间的标签:

“闲聊:智商:身份验证”, "jabber:智商:名册", "jabber:iq:注册", “瓮:ietf:参数:xml:ns:xmpp-bind”

它还会查找 ProviderManager 中是否有已注册的 IQProvider。这就是我的问题的根源。没有注册 VCard 的 IQProvider。因此,vCard 标签内的任何信息都会被删除。

不过注册这个 IQProvider 并不太难:

    ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());

这解决了我上面保存我自己的 vCard 并再次下载的小例子。我在下载其他用户电子名片时仍然遇到问题...要仔细研究一下这个问题,也许会为该问题打开另一个线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Smack 通过 XMPP 设置/获取配置文件数据 的相关文章

随机推荐

  • Python向图像添加额外区域

    所以我有一张包含图像尺寸的表格 有多个不同尺寸的图像 66x66 400x400 等 我有一个图像示例 原始图像 其尺寸始终为 600x532 该图像上是一种产品 电视 PC 等 我必须调整该图像的大小 这不是问题 但如果我按照比例这样做
  • Linux bash 中波浪号的含义(不是主目录)

    首先 我知道 是主目录 CD 至 or 带我到主目录 然而 cd X带我去一个特别的地方 在那里X似乎是什么 在 bash 中 如果我点击 cd 然后点击选项卡 它会显示一堆可能的 X选项如 mail and postgres and ss
  • 如何计算r中两年的移动平均值

    我有一个关于并购 M As 的大数据框 900k 行 df 有四列 date 并购完成时 目标国家 被合并 收购的国家的公司 收购方 国家 收购方是哪个国家的公司 以及big corp 无论收购方是否是大公司 其中 TRUE 表示该公司很大
  • SQL:链接连接效率

    我的 WordPress 插件中有一个查询 如下所示 SELECT users U meta value AS first name M meta value AS last name FROM nwp users AS users LEF
  • 什么时候使用扩展方法,ext.方法与继承?

    我们开始使用 C NET 3 0 我想知道你们是如何使用扩展方法的 你什么时候使用它们 另外 如果您还列出使用它们的所有黑暗先决条件 我将不胜感激 使用扩展方法的次数 当你不控制扩展的类型时 您不想强迫实现者提供可以使用现有方法完成的代码
  • Inappbrowser回调

    我尝试使用 inappbrowser 登录 facebook 后回拨 但它无法检查电子邮件 姓名等 这是我的代码 Inapp浏览器调用 function onDeviceReady var my client id FBkey my red
  • 在文本文件上书写时,重音符号和特殊字符无法正确显示

    这就是我正在做的事情 我在网站上进行网络爬虫以供个人使用 以复制文本并将书籍的章节设置为文本格式 然后使用另一个程序将其自动转换为 pdf 以将其放入我的云中 一切都很好 直到发生这种情况 特殊字符无法正确复制 例如重音在文本文件上显示为
  • 自旋锁在单处理器单核架构中有用吗?

    我对自旋锁的功能感到困惑 自旋锁用于阻止进程重新调度 然而 在只有一个核心的机器上 使用自旋锁有用吗 防止上下文切换 您的观察结果很好 在单处理器系统上 旋转等待资源是没有意义的 因为您最好尽早切换线程 互斥体和信号量正是这样做的 在多处理
  • 如何使用 Laravel 4 Eloquent 连接列?

    我有一张桌子叫tenantdetails其中包含 Tenant Id First Name Last Name 我想找回First Name and Last Name通过 MySQL 的串联功能作为一列 所以我写在我的controller
  • java.lang.IllegalArgumentException:未找到属性类的 Setter

    我想实现一个带有行编辑的表格 I found 在展示柜中 但我每次都会收到此错误 javax servlet ServletException 找不到属性类的 Setter java lang IllegalArgumentExceptio
  • 如何使用代码“约定”映射来忽略属性映射

    有什么方法可以避免使用 NHibernate 3 2 使用代码约定映射来映射属性吗 默认情况下 所有属性都会被映射 2 作为复制粘贴 IsPersistent 属性默认实现的替代方案 它可以通过反射重用 var mapper new Con
  • 如何对重新采样的音频数据进行双三次(或其他非线性)插值?

    我正在编写一些以不同速度播放 WAV 文件的代码 以便波形要么更慢 音调更低 要么更快 音调更高 我目前正在使用简单的线性插值 如下所示 int newlength int Math Round rawdata Length lengthM
  • PHP NuSoap 中的复杂类型

    我正在使用 PHP 中的 NuSoap 库构建一个 Web 服务 我的 Web 服务将充当客户端和供应商现有的 Web 服务之间的中间层 因此 客户端不是直接连接到供应商 而是连接到我的 Web 服务 我的 Web 服务连接到供应商并获取响
  • 在自己的构造函数中调用 thread.start() [重复]

    这个问题在这里已经有答案了 线程在自己的构造函数中调用 this start 是否合法 如果是的话 这会导致什么潜在问题 我知道在构造函数运行完成之前该对象不会完全初始化 但除此之外还有其他问题吗 出于内存安全的原因 您不应从其构造函数内向
  • VS2008 jQuery Intellisense 不工作 - (jquery-1.4.1.js)

    我在谷歌上搜索过 遵循 scottguthrie 的文章 也在此处寻找解决方案 但无济于事 我的环境由 VS2008 SP1 组成 包括 JQuery intellisense 的修补程序 我已经从 jquery 网站下载了 jquery
  • GestureDetector.onTouchEvent 中的 NullPointerException

    我有一个在 onTouch 中使用 GestureDetector 的活动 在我的布局中 我还有一个实现 onClickListener 的视图 在 Android ICS 上 我在处理 TouchEvent 时收到 NullPointer
  • 在 Swift 中使用 Container View 进行委托

    我正在为 iPad Pro 开发一个应用程序 在这个应用程序中 containerView用于添加额外的views并与他们互动 首先 我创建了一个协议 protocol DataViewDelegate func setTouch touc
  • Python 中基于收益的协程与带有 @asyncio.coroutine 和 @types.coroutine 装饰器的协程有何不同?

    我一直在尝试理解异步编程 尤其是 Python 中的异步编程 我知道 asyncio 是基于事件循环构建的 该事件循环安排协程的执行 但我已经阅读了几种定义协程的不同方法 并且我很困惑它们如何相互关联 I read 本文 http masn
  • 从批处理文件调用脚本时如何指定开关参数

    我有一个脚本foo ps1和一个批处理文件foo cmd用于通过双击文件资源管理器中的 cmd 文件来启动脚本 该脚本接受一个开关参数 但我不知道如何提供这种参数 简单的参数就可以了 Foo ps1 param Parameter Swit
  • 如何使用 Smack 通过 XMPP 设置/获取配置文件数据

    我正在 Android 上使用 Smack 库开发 XMPP 客户端 花名册 消息 状态等内容运行得很好 然而 我没有找到一种方法来存储额外的个人资料信息 用户图片 狗的名字 我从谷歌搜索中看到的唯一方法是使用 VCard 但它根本不起作用