首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMPP IQ结果解析问题

XMPP IQ结果解析问题
EN

Stack Overflow用户
提问于 2012-11-08 22:00:57
回答 3查看 1.8K关注 0票数 2

我正在建立一个XMPP聊天客户端应用程序与eclipse,java和asmack。通过使用教程和许多谷歌搜索,我设法让好友列表正常工作,实际聊天也很好。我的问题是搜索更多的好友添加到我的联系人列表中。要发送的XML示例如下:http://xmpp.org/extensions/xep-0055.html我的请求是:

代码语言:javascript
复制
<iq
id="search123"
from="name3@webserv.xxx.com/name3"
to="search.xxx.zzz.com"
type="set" >
<query xmlns="jabber:iq:search" >
    <nick>
android
    </nick>
</query>
</iq>

我认为我得到的回应是/是这样的:

代码语言:javascript
复制
<iq
id="search123"
from="search.xxx.zzz.com"
to="name3@webserv.telebroad.com/Smack"
type="result" >
</iq>

但是使用connConfig.setDebuggerEnabled(true);(和一个在线远程登录客户端),我设法发现服务器实际上工作正常,并且正在发送请求的结果,但我只是得到您上面看到的结果。我已经做了4天了,我的自尊心很低:P这是我关于IQ请求和响应的代码:

代码语言:javascript
复制
Packet asdf = new Packet() {
                    @Override
                    public String toXML() {
                        return    "<iq type='set'"+
                                " from='name3@webserv.xxx.com/name3'"+
                                " to='search.xxx.zzz.com'"+
                                " id='search2'"+
                                " xml:lang='en'>"+
                              " <query xmlns='jabber:iq:search'>"+
                                " <nick>Android</nick>"+
                              " </query>"+
                            " </iq>";
                    }
                };


ChatList.connection.sendPacket(asdf);
                Log.e("packet", "request = "+ asdf.toXML());
                PacketFilter filter = new IQTypeFilter(IQ.Type.RESULT);
                ChatList.connection.addPacketListener(new PacketListener() {
                    public void processPacket(Packet packet) {
                        IQ iq = (IQ)packet;


                        Log.e("response","incoming packet : "+ packet.toXML());
                        Log.e("response","incoming packet2 : "+ packet.toString());

                    }
                }, filter);  

我已经尝试了很多TypeFilters,但都没有用。我被难住了!

底线:

1.请求被服务器正确接受;

2.服务器响应正确(调试器是这样说的);

3.任何类型或toXML都会从上面打印出类型result XML (没有response.toString =‘result’>后面的实际项。

4.我为这个app...help!:)的最后一次构建已经晚了一周。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-08 20:49:02

https://stackoverflow.com/a/14214622/1688731 This...just有效!我不知道为什么。也许Iterator iterator = row.getValues("jid");做到了。但是其他的,我已经试过很多次了!

票数 0
EN

Stack Overflow用户

发布于 2013-01-08 00:07:23

尝试添加

代码语言:javascript
复制
ProviderManager pm = ProviderManager.getInstance(); 
pm.addIQProvider( "query","jabber:iq:search",new UserSearch.Provider());
pm.addExtensionProvider("x","jabber:x:data", new DataFormProvider());

在建立连接之前。

票数 1
EN

Stack Overflow用户

发布于 2012-11-08 23:06:51

这个规范已经通过UserSearchManager实现了。试着用它来代替。

至于您自己的情况,我猜您还没有为这个特定的元素和名称空间(如org.jivesoftware.smackx.search.UserSearch$Provider). )注册适当的provider在正常的Java环境中,这应该已经注册,但您必须自己在Android中对其进行编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13290445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档