2014-02-16 51 views
2

我在aSmack上创建VCard时遇到问题。我可以看到,当我尝试加载它时,我的VCard未保存。使用aSmack和Openfire无法保存VCard

  • 当我尝试加载另一个客户端创建一个电子名片,一切完美的作品。
  • 当我尝试从Openfire的创建用户加载电子名片,我收到以下错误:

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时,我不会收到错误,但它不会保存它!

有没有人有同样的问题?

回答

3

我认为这个问题可能是你需要指定谁创建的电子名片属于:

  • 将当前登录的用户,使用vcard.load(conn)
  • 为您服务的任何用户,使用vcard.load(conn, username)其中username应该是完整的用户名,即[email protected]

我测试此代码,一切工作正常:

// 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 [email protected] 
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(); 
} 
+0

您是否尝试过使用aSmack来代替Smack?我认为我的问题可能特定于aSmack – Caroline

+0

我尝试过使用aSmack。它与当前登录的用户正常工作。而当您尝试更换另一个vCard时...它仍会更新当前登录用户的vCard。这是根据文档,正确的行为。这是令人困惑的王者,但它是有道理的,你不能修改比你更别人的电子名片。 –