加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – asmack – 接收自定义XML消息||

发布时间:2020-05-24 09:57:28 所属栏目:Java 来源:互联网
导读:我花了一些时间在 Android设备中添加smack.providers,我的应用程序很好地接收了它.我添加了默认的iqProviders和extensionProviders,但我还添加了我的自定义extensionProvider,它是以下内容: extensionProvider elementNameplayers/elementName namespaceboxe

我花了一些时间在 Android设备中添加smack.providers,我的应用程序很好地接收了它.我添加了默认的iqProviders和extensionProviders,但我还添加了我的自定义extensionProvider,它是以下内容:

<extensionProvider>
  <elementName>players</elementName>
  <namespace>boxer:players</namespace>
  <className>company.games.boxer.PlayerListProvider</className>
</extensionProvider>

我还要介绍一下PlayerListProvider类,它目前只是为了看它是否会被调用(它不会被调用) – 当我知道它被调用时我将完全实现它,因此至少是功能的一部分作品:

import java.util.List;
import java.util.Map;

import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider;

import android.util.Log;

@SuppressWarnings("deprecation")
class PlayerListProvider extends EmbeddedExtensionProvider {
  protected PacketExtension createReturnExtension(String currentElement,String currentNamespace,Map<String,String> attributeMap,List<? extends PacketExtension> content) {
    Log.w("***** AAAAAAAAAAAAAAAAAAAA *******","0");
    return new XMLPlayerList();
  }

}



class XMLPlayerList implements PacketExtension {

  public String getElementName() {
    return "aaaaa";
  }

  public String getNamespace() {
    return "aaaaa";
  }

  public String toXML() {
    return "aaaaa";
  }

}

当我运行客户端Android应用程序时,我收到以下消息:

<message to="eee@localhost" type="chat" id="9" from="admin@localhost">
  <body>
    &lt;players xmlns="boxer:players" command="playerlist"&gt;
      &lt;player&gt;test1&lt;/player&gt;
      &lt;player&gt;test2&lt;/player&gt;
    &lt;/players&gt;
  </body>
  <thread>3P0i00</thread>
</message>

我现在的问题是,为什么在收到消息时没有调用PlayerListProvider(EmbeddedExtensionProvider).该消息包含标记,并具有boxer:player的命名空间,正如我在smack.providers中指定的那样.

有什么想法吗?

解决方法

在SO上阅读了类似问题之后,我遇到了 question/answer和 blog post about another way( part 1)( part 2)来实现自定义消息发送/接收.

您是否考虑过使用PacketExtensionProvider代替EmbeddedExtensionProvider?

如果您有兴趣试用它来代替EmbeddedExtensionProvider,可以在here中更详细地解释它.它可能不是您正在寻找的……(看起来它需要更多的手动解析方法),但它可能会识别您的PlayerListProvider类(通过扩展PEPEvent类.)

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读