Android Smack XMPP 节侦听器:缺少节属性

Posted

技术标签:

【中文标题】Android Smack XMPP 节侦听器:缺少节属性【英文标题】:Android Smack XMPP stanza listener : Missing stanza attribute 【发布时间】:2018-03-20 13:37:41 【问题描述】:

这是从 api 创建的节:

<message xmlns="jabber:client" to="+60123333xxx@xxxx.xxxx.my/84947029xxx52245593xxx" from="7xxxa-3cd4-44c6-b5xxxxe5d3@xxxx.xxxx.xxxx.my">
    <x xmlns="jabber:x:conference" reason="new group chat : mucduke" jid="7xxxa-3cd4-44c6-b5xxxxe5d3@xxxx.xxxx.xxxx.my"></x>
    <body>new group chat : mucduke</body>
</message>

我在 android 中使用 connection.addAsyncStanzaListener(stanzaListener, stanzaFilter) 来获取节,但如果节中缺少“原因”和正文元素,则将其归属。谁能帮助我为什么会发生这种情况?

【问题讨论】:

【参考方案1】:

使用以下StanzaTypeFilter 添加addSyncStanzaListener

 StanzaTypeFilter filter = new StanzaTypeFilter(Message.class);

    mStanzaListener = new StanzaListener() 
        @Override
        public void processPacket(Stanza stanza) throws SmackException.NotConnectedException, InterruptedException 
                onMessageReceived(stanza);
        
    ;
    connection.addSyncStanzaListener(mStanzaListener, filter);

获取stanzaonMessageReceived

public void onMessageReceived(Stanza stanza) 

  if(stanza instanceof Message)
      Message msg= (Message) stanza;
      msg.getBody();
      ...
      ...
      
  

【讨论】:

以上是关于Android Smack XMPP 节侦听器:缺少节属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smack Android 将字符串转换为 XMPP 节

如何使用 Smack Android 库将 XMPP IQ 节发送到服务器?

在 xmpp smack 库中收到两次消息

使用 Smack 接收自定义 XMPP 节

Android基于XMPP Smack Openfire下学习开发IM连接断开重连

我是不是必须为 smack xmpp 连接创建两个单独的类,一个用于后台侦听器,另一个用于前台侦听器?