【问题标题】:asmack - can't read VCardasmack - 无法读取 VCard
【发布时间】:2012-02-01 02:26:44
【问题描述】:

我完全按照答案的建议 (Asmack not loading VCard) 做了,但它仍然不起作用。 DEBUG 输出显示 Smack 接收到带有 VCard 信息的数据包,但随后在 https://github.com/rtreffer/smack/blob/master/source/org/jivesoftware/smackx/packet/VCard.java#L548 中抛出 ClassCastException,我得到的只是 'No VCard for xxx@xxx'。

我的代码:

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();
}

数据库中的 VCard 信息正常 - 只有最后的铸造失败。有什么建议吗?

【问题讨论】:

  • 一条评论 - 如果我直接使用 VCardProvider,我可以从字符串创建 VCard:String vCardString = prefs .getString(UserPreferences.USER_VCARD, null); userVCard = VCardProvider.createVCardFromXML(vCardString);
  • 您是否尝试过使用其他方法userVCard.load(connection, user);,user 是您要检索 vCard 的用户的 id(即本例中的您的 id)?我不知道它是否会更好,但这是我成功使用的那个。
  • 我也试过了,结果也差不多。 VCard 数据是从服务器获取的,但 asmack 不会将其解析为 VCard 对象。
  • 我还没有找到解决方案。我无法解析任何用户的 VCard,尽管它们是从服务器获取的。

标签: java android smack vcf-vcard asmack


【解决方案1】:

我最终决定不仅在getSearchForm returns null when using UserSearch in XMPP with aSmack 这篇帖子之后的配置中添加 VCardProvider,而且还添加了整个九码,并且成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多