(a)Smack的IQ.toXml()返回没有自定义子元素的XML

Gor*_*ail 5 android xmpp package smack asmack

我在android项目中使用asmack最新版本(asmack-android-8-source-0.8.3),我有以下代码:

connection.addPacketListener(new PacketListener()
{
    @Override
    public void processPacket(Packet p)
    {
        if(p.getPacketID().equals("v3"))
        {
            Log.e("TAG", p.toXML());
        }
    }
}, new IQTypeFilter(IQ.Type.RESULT));


Packet iq = new Packet() 
{
    @Override
    public String toXML() 
    {
        String str = "<iq type='get' id='v3'><getservertime xmlns='urn:xmpp:mrpresence'/></iq>";
        Log.e("TAG", str);
        return str;
    }
};

//sends <iq type='get' id='v3'><getservertime xmlns='urn:xmpp:mrpresence'/></iq>
connection.sendPacket(iq);
Run Code Online (Sandbox Code Playgroud)

在调试器中,响应没问题,这是预期的:

<iq type="result" id="v3" to="minimaal@mrserver/Smack">
    <servertime xmlns="urn:xmpp:mrpresence" utc="2013-06-28T11:45:32.380Z" local="2013-06-28T07:45:32.380Z"/>
</iq>
Run Code Online (Sandbox Code Playgroud)

但是包列表器中的p.toXML(),它缺少标签"servertime":

<iq id="v3" to="minimaal@mrserver/Smack" type="result"></iq>
Run Code Online (Sandbox Code Playgroud)

关于我做错的任何建议?

Flo*_*low 3

<servertime/>是一个自定义子元素,Smack 不知道它。解析该节时它会被忽略。您需要通过创建一个需要ProviderManager.

您可以在 Smack 的有关Provider Architecture 的文档中阅读更多相关信息。