在Openfire服务器中加载带有Smack(Android)的vCard

在Openfire服务器中加载带有Smack(Android)的vCard,android,xmpp,openfire,smack,asmack,Android,Xmpp,Openfire,Smack,Asmack,我正在android平台上使用XMPP协议和Openfire服务器实现一个消息传递应用程序。我需要保存并加载我自己的Vcard和其他用户的Vcard。目前,我设法将vCard保留在服务器上,并可以再次加载它。问题是对于其他用户vCard,服务器总是返回XMPPError:未实现的功能-取消 我使用以下库: compile 'org.igniterealtime.smack:smack-android:4.1.2-SNAPSHOT' compile 'org.igniterealtime.smac

我正在android平台上使用XMPP协议和Openfire服务器实现一个消息传递应用程序。我需要保存并加载我自己的Vcard和其他用户的Vcard。目前,我设法将vCard保留在服务器上,并可以再次加载它。问题是对于其他用户vCard,服务器总是返回XMPPError:未实现的功能-取消

我使用以下库:

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(工作正常)

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

问题就在这里。加载其他用户Vcard:

VCardManager vCardManager = VCardManager.getInstanceFor(connection);
boolean isSupported = vCardManager.isSupported(user);
if (isSupported)  // return true
    vCard = vCardManager.loadVCard(user);
要加载Vcard的用户名是正确的

有什么想法吗


提前感谢。

您可能面临的问题是JID的后缀。getUser()方法将JID返回为user@example.com/啪。要获取vCard详细信息,您需要按以下方式查询它:user@example.com(没有打耳光)。试试看,让我知道它是否有效。

太棒了!!。在connection.getUser()中,我将收到usuario@jabber/啪。我试着用usuario@jabber只有这样,它工作得很好。非常感谢。希望你看到了,这是一篇比较老的帖子,但我遇到了完全相同的问题。但我试着装的jid是example@anotherxmpp.com,没有Smack扩展。你知道为什么它不工作吗?嗯,我解决了我的问题,用户的jid没有/Smack。您在应用程序中使用的是什么版本?谢谢您的回复…我正在使用Smack 4.1.6 API,但昨天我阅读了一些错误报告,似乎它依赖于服务器。我的jid是正确的,所以这不可能是问题所在。还有一个问题,你的连接,你是用你的jid登录的,还是我需要在调用另一个用户的vcard之前对连接做一些更改?不需要再做任何更改。我用我的JID登录,从那里我可以咨询其他用户vCard。然而,根据我使用vCard的经验,它们有点不稳定。如果你只使用管理头像就可以很好地工作,如果你输入大量信息,结果会更糟。奇怪…好的,但是再次感谢你的回复。。。。。
VCard vCard = null;
VCardManager vCardManager = VCardManager.getInstanceFor(connection);
vCard = vCardManager.loadVCard();
VCardManager vCardManager = VCardManager.getInstanceFor(connection);
boolean isSupported = vCardManager.isSupported(user);
if (isSupported)  // return true
    vCard = vCardManager.loadVCard(user);