Java Android Smack XMPP:原始响应和节侦听器响应不一样

Java Android Smack XMPP:原始响应和节侦听器响应不一样,java,android,xmpp,smack,Java,Android,Xmpp,Smack,目前我正在开发一款Android聊天应用程序。我使用Android Smack库版本4.1.5。现在,我在获取消息存档的响应结果时遇到了一个问题。在原始响应和我的侦听器之间有不同的结果。谢谢你的帮助 原始响应 D/SMACK: RECV (0): <message from='hazmi@xmpp.mationable.com' to='fahmi@xmpp.mationable.com/Smack'><result xmlns='urn:xmpp:mam:tmp' id='1

目前我正在开发一款Android聊天应用程序。我使用Android Smack库版本4.1.5。现在,我在获取消息存档的响应结果时遇到了一个问题。在原始响应和我的侦听器之间有不同的结果。谢谢你的帮助

原始响应

D/SMACK: RECV (0): <message from='hazmi@xmpp.mationable.com' to='fahmi@xmpp.mationable.com/Smack'><result xmlns='urn:xmpp:mam:tmp' id='1486108894062450'><forwarded xmlns='urn:xmpp:forward:0'><message xmlns='jabber:client' from='fahmi@xmpp.mationable.com/Smack' to='hazmi@xmpp.mationable.com' xml:lang='en' id='209' type='chat'><body>test</body><thread>9461d01b-ef76-4ab1-a619-0360fbb4dcdf</thread></message><delay xmlns='urn:xmpp:delay' from='xmpp.mationable.com' stamp='2017-02-03T08:01:34.062Z'/></forwarded></result></message>
D/SMACK:RECV(0):测试9461D01B-ef76-4ab1-a619-0360fbb4dcdf
节听众

D/FromStanza: <message to='fahmi@xmpp.mationable.com/Smack' from='hazmi@xmpp.mationable.com'><result xmlns='urn:xmpp:mam:tmp'><body>test</body><delay></delay><thread>e849c5e8-d4ee-4faf-a95c-43773eaf30a3</thread></result></message>
D/来自节:teste849c5e8-d4ee-4faf-a95c-43773eaf30a3
这是我的密码

    final IQ iq = new IQ("query") {
            @Override
            protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
                xml.append(" xmlns='urn:xmpp:mam:tmp'>");
                xml.element("with", recipient);

                return xml;
            }
        };

        iq.setType(IQ.Type.get);
        iq.setFrom(connection.getUser());
        iq.setTo(recipient);
// set the type
// send the request
        try {
            connection.sendStanza(iq);
        } catch (SmackException.NotConnectedException e) {
            e.printStackTrace();
        }

        ProviderManager.addIQProvider("query", "urn:xmpp:mam:tmp", new IQProvider<IQMessageArchive>() {
            @Override
            public IQMessageArchive parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException, SmackException {
                // Start parsing loop
                int eventType = parser.next();
                outerloop:
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    switch (eventType) {
                        case XmlPullParser.START_TAG:
                            String elementName = parser.getName();

                            break;
                        case XmlPullParser.END_TAG:
                            if (parser.getDepth() == 3) {
                                break outerloop;
                            }
                            break;
                    }
                    eventType = parser.next();
                }
                return null;
            }
        });

connection.addAsyncStanzaListener(new StanzaListener() {
    @Override
    public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
        Log.d("FromStanza", ""+packet.toXML());

    }
}, new StanzaFilter() {
    @Override
    public boolean accept(Stanza stanza) {
        return true;
    }
});
最终智商=新智商(“查询”){
@凌驾
受保护的IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml){
append(“xmlns='urn:xmpp:mam:tmp'>”;
元素(“with”,recipient);
返回xml;
}
};
iq.setType(iq.Type.get);
iq.setFrom(connection.getUser());
智商设置(收件人);
//设定类型
//发送请求
试一试{
连接。发送节(iq);
}捕捉(SmackException.NotConnectedException e){
e、 printStackTrace();
}
addIQProvider(“查询”,“urn:xmpp:mam:tmp”,新IQProvider(){
@凌驾
公共IQMessageArchive parse(XmlPullParser parser,int initialDepth)抛出XmlPullParserException、IOException、SmackException{
//开始解析循环
int eventType=parser.next();
外部环路:
while(eventType!=XmlPullParser.END_文档){
开关(事件类型){
case XmlPullParser.START_标记:
String elementName=parser.getName();
打破
case XmlPullParser.END_标记:
if(parser.getDepth()==3){
断开外环;
}
打破
}
eventType=parser.next();
}
返回null;
}
});
addAsyncStanzaListener(新的StanzaListener(){
@凌驾
public void processPacket(节数据包)抛出SmackException.NotConnectedException{
Log.d(“FromStanza”,“packet.toXML());
}
},新的节过滤器(){
@凌驾
公共布尔接受(节){
返回true;
}
});

SMACK上的最新版本可能具有本机MAM支持:-但是,您使用IQProvider进行解析,因为接口的作用是在java对象中映射XML,而不仅仅是返回“null”