我正在使用asmack-android-17-0.8.3
为我的android项目。
我已将asmack源复制到我的项目中,并且还在ConfigureProviderManager类中添加了我的自定义IQ提供程序,如下所示:
other extensions and IQ providers...
// XEP-184 Message Delivery Receipts
pm.addExtensionProvider("received", "urn:xmpp:receipts", new DeliveryReceipt.Provider());
pm.addExtensionProvider("request", "urn:xmpp:receipts", new DeliveryReceipt.Provider());
// XEP-0115 Entity Capabilities
pm.addExtensionProvider("c", "http://jabber.org/protocol/caps", new CapsExtensionProvider());
// XEP-0136
pm.addIQProvider("list", "urn:xmpp:archive", new ListIQProvider());
正如您所看到的,在最底线,我添加了IQProvider以支持在XEP-0136中存档!
现在,当我添加此内容时,我可以将存档的聊天数据提供给我的iq提供商,但不幸的是,同时它也使我的客户端无法通过ChatManager接收新的聊天记录!
这仍然是asmack中的错误吗?添加我的自定义iqprovider的最佳方法是什么? 请给我建议如何解决这个问题。谢谢!
答案 0 :(得分:1)
你是否从文档中看到这句话“解析IQ子文档并创建一个IQ实例。每个IQ必须有一个子元素。在方法调用开始时,xml解析器将位于IQ子元素的开始标记处。 在方法调用结束时,解析器必须定位在子元素的结束标记上。“?
也许您应该编写代码,如smack内置提供程序MUCAdminProvider:
boolean done = false;
while (!done) {
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equals("actor")) {
item.setActor(parser.getAttributeValue("", "jid"));
}
if (parser.getName().equals("reason")) {
item.setReason(parser.nextText());
}
}
else if (eventType == XmlPullParser.END_TAG) {
if (parser.getName().equals("item")) {
done = true;
}
}
}