2015-06-01 3 views
0

Я делаю приложение для Android с помощью XMPP (smack 4.1.1). Вот прослушиватель пакетов stanza, который я использовал.XMPP Smack 4.1.1 UnsupportedIQ error

Но я получил ошибку 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

Смежные вопросы