使用 asmack 未从 vCard 获得准确响应

Posted

技术标签:

【中文标题】使用 asmack 未从 vCard 获得准确响应【英文标题】:Not getting exact response from vCard using asmack 【发布时间】:2012-03-26 05:27:24 【问题描述】:

我正在使用 asmack 库检索 vCard。我能够检索 vCard,但响应并不完全符合我的要求,它只给出响应

<iq id="3842p-8" to="lalit3686.android@gmail.com" type="get">
                                <vCard xmlns='vcard-temp'><FN>Lalit Poptani</FN>

预期的响应是有关用户的完整详细信息/信息,如 here 所示

我试过如下,

VCard vCard = new VCard();
try 
        ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp",
                                                            new VCardProvider());
        vCard.load(conn, user);
        Log.d("Vcard XML", vCard.toXML());
     catch (XMPPException e) 
        e.printStackTrace();
    

我还尝试使用this answer 配置所需的一切。那么,是否需要进一步检索用户 vCard 的完整 xml?

【问题讨论】:

嗯。我看到您正在以完全相同的方式运行查询that appears to have worked for another SO user。唯一的复杂情况是您的输出在第一次输入后似乎被切断了。 this thread 对你有帮助吗? 感谢您的评论,但我也已经检查过了,但它不起作用。 很奇怪。不过,我想知道:Log.d 真的打印所有 XML 吗?附加调试器对这个问题有什么影响? Log.d("Vcard XML", vCard.toXML()); 打印我已经添加的输出。 感谢您的快速回复,但我认为您误会了。我怀疑Log.d 是否会以某种方式截断消息。这似乎与其行为一致:***.com/a/4269700/517815。公平地说,这是一段相当短的文字...... 【参考方案1】:

在一个简单的 Java 应用程序(非 Android)中使用常规 Smack 尝试它,您可以在其中打开调试窗口 (-Dsmack.debugEnabled=true),该窗口将为您提供从中接收的原始节服务器。这至少会确认该节是正确的。如果不是,那么您有服务器问题。我认为这不太可能,因为格式错误的节通常会导致连接终止,因为客户端无法解析流。

如果它们是正确的,那么提供程序本身可能存在问题。根据文档,Smacks 的VCard class is incomplete,因此返回的信息可能根本不在解析的字段列表中。

知道返回的节将更容易验证这一点。

asmack 是从 Smack 派生的,因此在这种特殊情况下(实际上大多数情况下)它的行为方式应该完全相同。

【讨论】:

啊啊啊!!!谢谢只是不知道mConfiguration.setDebuggerEnabled(true); 做了什么,应用了它,让它工作了;)

以上是关于使用 asmack 未从 vCard 获得准确响应的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 asmack 库发送和收听自定义 xmpp 存在数据包

未从响应标头中的后端获取 JWT 令牌

无法使用 asmack 获得加入的聊天室

ASmack - 从哪里获得 ChatManager?

使用 ResponseEntity 时未从 Websphere 响应中返回 text/html 标头,在 Tomcat 中有效吗?

从 Contactdata Intent 获取 vCard - Android