我在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时我没有出错,它只是不保存它!
有没有人有同样的问题?
答案 0 :(得分:3)
我认为问题可能是您需要指定您创建的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();
}