2014-02-16 74 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。這是根據文檔,正確的行爲。這是令人困惑的王者,但它是有道理的,你不能修改比你更別人的電子名片。 –