【问题标题】:XMPP Smack 4.1.1 UnsupportedIQ errorXMPP Smack 4.1.1 UnsupportedIQ 错误
【发布时间】: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();
}

【问题讨论】:

    标签: android xmpp chat smack


    【解决方案1】:

    UnsupportedOperationException 从类 UnparsedIQ 抛出时 “由于未找到提供程序而无法解析的 IQ 节。”

    Pls refer this

    我猜,在您的情况下,找不到“urn:tmp:token”的提供者。

    【解决方案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;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      相关资源
      最近更新 更多