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