【发布时间】:2015-08-20 15:42:45
【问题描述】:
我正在 Android 平台上使用 XMPP 协议和 Openfire 服务器实现消息传递应用程序。我需要保存并加载我自己的 Vcard 和其他用户的 Vcard。目前,我设法将我的 vCard 保存在服务器上,并且可以再次加载它。问题出在其他用户的 Vcard 上,服务器总是返回 XMPPError: feature-not-implemented - cancel。
我使用这个库:
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(工作正常)。
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(工作正常)
VCard vCard = null;
VCardManager vCardManager = VCardManager.getInstanceFor(connection);
vCard = vCardManager.loadVCard();
问题就在这里。加载其他用户 Vcard:
VCardManager vCardManager = VCardManager.getInstanceFor(connection);
boolean isSupported = vCardManager.isSupported(user);
if (isSupported) // return true
vCard = vCardManager.loadVCard(user);
加载Vcard的用户名正确。
有什么想法吗?
提前致谢。
【问题讨论】:
-
希望你看到了这个,这是一篇较旧的帖子,但我遇到了完全相同的问题。但是我尝试加载的 jid 是 example@anotherxmpp.com,没有 Smack 扩展名。你知道为什么它不起作用吗?
-
mmm 我用没有 /Smack 的用户的 jid 解决了我的问题。您在应用程序中使用的是什么版本?
-
感谢回复...我使用的是 Smack 4.1.6 API,但昨天我阅读了一些错误报告,似乎它与服务器有关。我的 jid 是正确的,所以这不是问题。还有一个问题,您的连接,您是刚刚使用您的 jid 登录,还是在调用另一个用户的 vcard 之前我需要对 Connection 进行一些更改?
-
没有必要进行更多更改。我使用我的 JID 登录,从那里我可以咨询其他用户的 vCard。但是,我使用 vCard 的经验是它们有点不稳定。如果你只用来管理头像就可以了,如果你输入很多信息效果就更差了。
-
奇怪....好的,但再次感谢您的回复.....
标签: android xmpp openfire smack asmack