gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:42 26 4
gpt4 key购买 nike

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

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

        VCard vCard = new VCard();
vCard.load(connection);
vCard.setEmailHome("meine_home@email.de");
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/

我在这里做错了什么?使用 Smack 存储配置文件相关信息的正确方法是什么?

最佳答案

我已经检查了 Smack 的源代码,并使用调试器检查了重要部分,并使用了 Smack 调试窗口。问题出在 Smack API 的 VCard 实现中。 .保存 VCard 确实如描述的那样工作,但是加载被破坏了。

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

“喋喋不休:智商:验证”,"jabber:iq:roster",“喋喋不休:智商:注册”,“urn:ietf:params:xml:ns:xmpp-绑定(bind)”

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

虽然注册这个 IQProvider 并不难:

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

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

关于java - 如何使用 Smack 通过 XMPP 设置/获取配置文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com