2012-02-01 82 views
1

我完全按照答案的建議(Asmack not loading VCard),但它仍然無法正常工作。 DEBUG輸出顯示Smack收到包含VCard信息的數據包,但在https://github.com/rtreffer/smack/blob/master/source/org/jivesoftware/smackx/packet/VCard.java#L548中拋出一個ClassCastException,我得到的全部內容是'沒有VCard for xxx @ xxx'。asmack - 無法讀取VCard

我的代碼:

public VCard getUserVCard() throws XMPPException { 
    VCard userVCard = new VCard(); 
    userVCard.load(connection); 
    return userVCard; 
} 

而且以前的一些初始化:

ConnectionConfiguration config = new ConnectionConfiguration(OF_HOST, OF_PORT, OF_SERVICE_NAME); 
config.setDebuggerEnabled(true); 
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
ProviderManager.getInstance().addIQProvider("vCard ", "vcard-temp", new org.jivesoftware.smackx.provider.VCardProvider()); 
connection = new XMPPConnection(config); 
this.context = context; 
try { 
    connection.connect(); 
} catch (XMPPException e) { 
    // TODO Auto-generated catch block 
     e.printStackTrace(); 
} 

數據庫中的虛擬卡信息OK - 只有最終鑄造失敗。有什麼建議麼?

+0

一個評論 - 如果我直接使用VCardProvider,我可以從一個字符串創建一個VCard: 'String vCardString = prefs .getString(UserPreferences.USER_VCARD,null); userVCard = VCardProvider.createVCardFromXML(vCardString); ' – PawelPredki 2012-02-01 13:51:22

+0

您是否嘗試過使用其他方法'userVCard.load(connection,user);',用戶是您要檢索vCard的用戶的id(即您的id在這種情況下)?我不知道它能否更好地發揮作用,但這是我成功使用的一種。 – Guillaume 2012-02-01 18:25:23

+0

我也嘗試過,結果很相似。 VCard數據是從服務器獲取的,但不會被asmack解析爲VCard對象。 – PawelPredki 2012-02-05 17:24:21

回答