Java 如何使用Smack通过XMPP设置/获取配置文件数据
我正在Android上使用Smack库开发XMPP客户端。花名册/信息/状态信息运行得非常好。然而,我没有找到一种方法来存储额外的个人资料信息(userpicture,狗的名字,…) 我从谷歌上看到的唯一方法就是使用vCard。但它根本不起作用。我尝试了以下方法:Java 如何使用Smack通过XMPP设置/获取配置文件数据,java,android,xmpp,smack,Java,Android,Xmpp,Smack,我正在Android上使用Smack库开发XMPP客户端。花名册/信息/状态信息运行得非常好。然而,我没有找到一种方法来存储额外的个人资料信息(userpicture,狗的名字,…) 我从谷歌上看到的唯一方法就是使用vCard。但它根本不起作用。我尝试了以下方法: VCard vCard = new VCard(); vCard.load(connection); vCard.setEmailHome("meine_home@email.de");
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中,也没有出现在该系统中。输出:
vCard.load(connection, user);
System.out.println(user + " has this vCard: " + vCard.toXML());
所以一切都出了问题,但没有迹象表明是什么。我用google talk服务器和我自己的openfire副本尝试了这个方法,得到了相同的结果。顺便说一句,我正在使用这个版本的Smack:
我做错了什么?使用Smack存储配置文件相关信息的正确方法是什么?首先尝试使用另一个客户端为该用户设置vCard,看看这会如何更改结果。为了进一步诊断,您需要在Smack中打开协议调试(在桌面计算机上使用“
-Dsmack.debugEnabled=true
”),并在此处发布相关位。我已经检查了Smack的源代码,并使用调试器检查了重要部分,还使用了Smack调试窗口。问题出在的VCard实现内部。保存VCard的工作方式如前所述,但加载中断
parseIQ(XmlPullParser)是PacketReader.java类的一部分,处理不同类型的包。它仅处理具有以下名称空间的标记:
“jabber:iq:auth”,
“叽叽喳喳:智商:花名册”,
“jabber:iq:register”,
“urn:ietf:params:xml:ns:xmpp绑定”
它还会查看ProviderManager中是否有任何已注册的IQProvider。这是我问题的根源。没有注册vCard的IQProvider。因此,vCard标签中的任何信息都会被删除
不过,注册此IQProvider并不太难:
ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());
这解决了我上面保存自己的vCard并再次下载的小例子。我仍然在下载其他用户的vCard时遇到问题。。。我们将对此进行更深入的研究,并可能为该问题打开另一个线程。您可以使用以下代码获取信息
VCard card = new VCard();
card.load(connection, "user@fqdn");
System.out.println("Voice: "+card.getPhoneHome("VOICE"));
谢谢,调试模式确实帮助我跟踪了这个问题。嗨@UlrichScheller我可以保存并加载我自己的vCard,但我不能加载其他用户的vCard。我收到了未实现的功能响应。有什么想法吗?你有吗?谢谢