繁体   English   中英

无法使用aSmack和Openfire保存VCard

[英]Can't save VCard using aSmack and Openfire

我在aSmack上创建VCard时遇到问题。 尝试加载时,我可以看到我的VCard尚未保存。

  • 当我尝试加载由其他客户端创建的VCard时,一切运行正常。
  • 当我尝试从Openfire上创建的用户加载VCard时,出现以下错误:

service-unavailable(503) at org.jivesoftware.smackx.packet.VCard.doLoad(VCard.java:568) at org.jivesoftware.smackx.packet.VCard.load(VCard.java:551)

  • 当我尝试从使用客户端创建的用户加载VCard时,出现以下错误:

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.

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