2015-06-01 38 views
0

我正在使用XMPP的Android聊天应用(4.1.1嫌)。 这里是节包监听器我用。XMPP啪4.1.1 UnsupportedIQ错误

但是,当我用这个监听我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(); 
} 

回答

0

我解决了这个问题。 这是我的代码。

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

UnsupportedOperationException异常是从类UnparsedIQ时抛出 “因为没有供应商被发现无法解析的IQ节。”

Pls refer this

我想,在你的情况下提供者 “瓮:TMP:令牌” 没有被发现。

+0

这也太 https://www.igniterealtime.org/builds/smack/docs/latest/文档/ providers.html – Ashishail