简体   繁体   English

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

[英]Load Vcards with Smack (Android) in Openfire Server

I am implementing a messaging application with the XMPP protocol and Openfire server on android platform. 我正在Android平台上使用XMPP协议和Openfire服务器实现消息传递应用程序。 I need save and load my own Vcard and other users vcard. 我需要保存并加载自己的Vcard和其他用户vcard。 At the moment, I managed to keep my vCard on the server and can load it again. 目前,我设法将我的vCard保留在服务器上并可以再次加载它。 The problem is with the other users Vcards, server always return XMPPError: feature-not-implemented - cancel. 问题在于其他用户的Vcards,服务器总是返回XMPPError:功能未实现 - 取消。

I use this libraries: 我用这个库:

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'

Show the code: 显示代码:

Save my own Vcard (Work fine). 保存我自己的Vcard(工作正常)。

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);

Load my own Vcard (Work fine) 加载我自己的Vcard(工作正常)

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

The problem is here. 问题出在这里。 Load other user Vcard: 加载其他用户Vcard:

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

The user name to load Vcard is correct. 加载Vcard的用户名是正确的。

Any ideas? 有任何想法吗?

Thanks in advance. 提前致谢。

The issue you might be facing is the suffix for the JID. 您可能遇到的问题是JID的后缀。 The connection.getUser() method returns the JID as user@example.com/Smack. connection.getUser()方法将JID返回为user@example.com/Smack。 To get the vCard details, you need to query it as user@example.com (without the /Smack). 要获取vCard详细信息,您需要将其查询为user@example.com(不带/ Smack)。 Try that out and let me know if it works. 尝试一下,让我知道它是否有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM