在Openfire Server中使用Smack(Android)加载Vcards

前端之家收集整理的这篇文章主要介绍了在Openfire Server中使用Smack(Android)加载Vcards前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在 Android平台上使用XMPP协议和Openfire服务器实现消息传递应用程序.我需要保存并加载自己的Vcard和其他用户vcard.目前,我设法将我的vCard保存在服务器上并可以再次加载它.问题在于其他用户的Vcards,服务器总是返回XMPPError:功能未实现 – 取消.

我用这个库:

@H_502_4@compile 'org.igniterealtime.smack:smack-android:4.1.2-SNAPSHOT' compile 'org.igniterealtime.smack:smack-tcp:4.1.2-SNAPSHOT' compile 'org.igniterealtime.smack:smack-extensions:4.1.2-SNAPSHOT'

显示代码

保存我自己的Vcard(工作正常).

@H_502_4@VCardManager vCardManager = VCardManager.getInstanceFor(connection); VCard vCard; vCard = vCardManager.loadVCard(); vCard.setNickName("User name"); URL urldefault = new URL("Avatar URL"); InputStream stream = urldefault.openStream(); byte[] avatar1 = readBytes(stream); vCard.setAvatar(avatar1,"avatar1/jpg"); vCard.setEmailHome("user email"); vCard.setPhoneHome("mobile","888888888"); vCardManager.saveVCard(vCard);

加载我自己的Vcard(工作正常)

@H_502_4@VCard vCard = null; VCardManager vCardManager = VCardManager.getInstanceFor(connection); vCard = vCardManager.loadVCard();

问题出在这里.加载其他用户Vcard:

@H_502_4@VCardManager vCardManager = VCardManager.getInstanceFor(connection); boolean isSupported = vCardManager.isSupported(user); if (isSupported) // return true vCard = vCardManager.loadVCard(user);

加载Vcard的用户名是正确的.

有任何想法吗?

提前致谢.

解决方法

您可能遇到的问题是JID的后缀. connection.getUser()方法将JID返回为user@example.com/Smack.要获取vCard详细信息,您需要将其查询为user@example.com(不带/ Smack).尝试一下,让我知道它是否有效.

猜你在找的Android相关文章