XMPP Smack 4.1.1 UnsupportedIQ 错误
Posted
技术标签:
【中文标题】XMPP Smack 4.1.1 UnsupportedIQ 错误【英文标题】:XMPP Smack 4.1.1 UnsupportedIQ error 【发布时间】:2015-06-01 21:56:39 【问题描述】:我正在使用 XMPP(smack 4.1.1) 制作 android 聊天应用程序。 这是我使用的节数据包侦听器。
但是当我使用这个监听器时,我得到了 UnsupportedIQ 错误。 我怎么了?
connection.addAsyncStanzaListener(new StanzaListener()
@Override
public void processPacket(Stanza p) throws SmackException.NotConnectedException
if (p.getStanzaId().equals(getTokenId))
IQ iq = (IQ) p;
if (iq != null && iq.getType().equals(IQ.Type.result))
// here, I want to get xxxxxx value from <value xmlns='jabber:client'>xxxxxxx</value>
, new StanzaFilter()
@Override
public boolean accept(Stanza stanza)
return true;
);
IQ tokenIQ = new IQ("query", "urn:tmp:token")
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml)
xml.rightAngleBracket();
return xml;
;
getTokenId = tokenIQ.getStanzaId();
try
connection.sendStanza(tokenIQ);
catch (SmackException.NotConnectedException e)
e.printStackTrace();
【问题讨论】:
【参考方案1】:UnsupportedOperationException 从类 UnparsedIQ 抛出时 “由于未找到提供程序而无法解析的 IQ 节。”
Pls refer this
我猜,在您的情况下,找不到“urn:tmp:token”的提供者。
【讨论】:
这也是igniterealtime.org/builds/smack/docs/latest/documentation/…【参考方案2】:我解决了这个问题。 这是我的代码。
class TokenIQ extends IQ
String token;
protected TokenIQ(String childElementName)
super(childElementName);
public String getToken()
return token;
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml)
return xml;
class TokenProvider extends IQProvider
@Override
public Element parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException, SmackException
TokenIQ tokenIQ = new TokenIQ("value");
int eventType = parser.next();
tokenIQ.token = parser.getText();
return tokenIQ;
ProviderManager.addIQProvider("value", "jabber:client", new TokenProvider());
//调用部分
//"<query xmlns='urn:tmp:token'/>"
IQ tokenIQ = new IQ("query", "urn:tmp:token")
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml)
xml.rightAngleBracket();
return xml;
;
getTokenId = tokenIQ.getStanzaId();
try
mConnection.sendStanza(tokenIQ);
catch (SmackException.NotConnectedException e)
e.printStackTrace();
//接收部分
mConnection.addAsyncStanzaListener(new StanzaListener()
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException
if (packet.getStanzaId() != null && packet.getStanzaId().equals(getTokenId))
TokenIQ iq = (TokenIQ)packet;
tokenId = iq.getToken();
, new StanzaFilter()
@Override
public boolean accept(Stanza stanza)
return true;
);
【讨论】:
以上是关于XMPP Smack 4.1.1 UnsupportedIQ 错误的主要内容,如果未能解决你的问题,请参考以下文章