[英]Can't save VCard using aSmack and Openfire
我在aSmack上创建VCard时遇到问题。 尝试加载时,我可以看到我的VCard尚未保存。
service-unavailable(503) at org.jivesoftware.smackx.packet.VCard.doLoad(VCard.java:568) at org.jivesoftware.smackx.packet.VCard.load(VCard.java:551)
remote-server-not-found(404) at org.jivesoftware.smackx.packet.VCard.doLoad(VCard.java:568) at org.jivesoftware.smackx.packet.VCard.load(VCard.java:551)
要从客户端创建VCard,请先登录,然后使用以下代码:
VCard userCard = new VCard();
userCard.setField("customField", "yes");
try {
userCard.save(mConnection);
Log.i(TAG,"usercard saved "+userCard.toXML()); /* it is displayed! */
} catch (XMPPException e) {
Log.e(TAG,"An error occured while sending Vcard"+userCard.toXML(),e);
}
在连接mConnection之前,我添加了以下行: ProviderManager.getInstance().addIQProvider("vCard","vcard-temp", new VCardProvider());
根据这篇文章( http://community.igniterealtime.org/thread/34689 ),如果我们使用LDAP,则无法修改VCard。 但是,当我尝试保存VCard时,我没有收到错误消息,只是没有保存!
有人有同样的问题吗?
我认为问题可能是您需要指定创建的vCard属于谁:
vcard.load(conn)
vcard.load(conn, username)
,其中username
应该是完整的用户名,即login@host.tld 我测试了这段代码,一切正常:
// Load vCard of logged in user
private void loadVCard(XMPPConnection conn) {
VCard vcard = new VCard();
vcard.load(conn);
vcard.setFirstName("Foo");
vcard.setAvatar(imageBytes("http://example.com/avatarjpg"), "image/jpeg");
vcard.save(conn);
}
// Load vCard of give user
// username: ex mylogin@chat.myservice.com
private void loadVCard(XMPPConnection conn, String username) {
VCard vcard = new VCard();
vcard.load(conn, username);
byte[] avatarBytes = vcard.getAvatar();
OutputStream out = new FileOutputStream(username + ".jpg");
out.write(avatarBytes);
out.close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.