Ulr*_*ler 4 java android xmpp smack
我正在Android上使用Smack库在XMPP客户端上工作.名册/消息/存在的东西运行得很好.但是,我没有找到存储其他个人资料信息的方法(用户图片,狗名,......).
我从谷歌搜索看到的唯一方法是使用VCards.但它根本行不通.我尝试了以下方法:
VCard vCard = new VCard();
vCard.load(connection);
vCard.setEmailHome("meine_home@email.de");
vCard.setLastName("Scheller");
vCard.setField("blafasel", "asdf");
vCard.save(connection);
Run Code Online (Sandbox Code Playgroud)
然后我一直在寻找一种方法来查看VCard信息.它既没有出现在iChat中也没出现在这个System.out中:
vCard.load(connection, user);
System.out.println(user + " has this vCard: " + vCard.toXML());
Run Code Online (Sandbox Code Playgroud)
所以出了什么问题,但没有任何迹象表明它是什么.我尝试使用google talk服务器和我自己的openfire副本,结果相同.顺便说一下,我正在使用这个版本的Smack:http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/
我在这做错了什么?使用Smack存储配置文件相关信息的正确方法是什么?
Ulr*_*ler 12
我已经检查了Smack的来源,并使用调试器以及使用Smack调试窗口浏览了重要部分.问题出在Smack API的VCard实现中.保存VCard确实可以正常工作,但是加载会中断.
parseIQ(XmlPullParser解析器)是PacketReader.java类的一部分,用于处理不同类型的包.它只处理具有以下命名空间的标记:
"jabber:iq:auth","jabber:iq:roster","jabber:iq:register","urn:ietf:params:xml:ns:xmpp-bind"
它还会查看ProviderManager中是否有任何已注册的IQProvider.这是我问题的根源.注册的VCards没有IQProvider.因此,无论vCard标签内部的任何信息都被删除.
注册这个IQProvider并不难:
ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());
Run Code Online (Sandbox Code Playgroud)
这解决了我上面的一个小例子,用于保存我自己的vCard并再次下载.我仍然无法下载其他用户的vcards ...要仔细研究这个并且可能为这个问题打开另一个线程.
| 归档时间: |
|
| 查看次数: |
12352 次 |
| 最近记录: |