接收定制的XML消息
我花了一些时间在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>
<players xmlns="boxer:players" command="playerlist">
<player>test1</player>
<player>test2</player>
</players>
</body>
<thread>3P0i00</thread>
</message>
我现在的问题是,为什么在接收消息时不调用PlayerListProvider(EmbeddedExtensionProvider)。 该消息包含标签并具有boxer:player的命名空间,正如我在smack.providers中指定的那样。
有什么想法吗?
在阅读了关于SO的类似问题之后,我遇到了这个问题/回答,以及关于实现自定义消息发送/接收的另一种方式(第1部分)(第2部分)的博客文章。
你有没有考虑使用PacketExtensionProvider而不是EmbeddedExtensionProvider?
这里详细解释,如果你有兴趣试用它来代替EmbeddedExtensionProvider
。 它可能不是你正在寻找的东西......(看起来好像需要更多的手动解析方法),但它可能会让你的PlayerListProvider
类被识别(通过扩展PEPEvent类)。
上一篇: receiving custom XML messages
下一篇: How do I morph / animate a custom shape into a circle? CANVAS JS