我正在为我的 android 项目使用 asmack-android-17-0.8.3
。
我已将 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 的最佳方式是什么? 请给我建议如何解决这个问题。谢谢!
最佳答案
你有没有从文档中看到这句话“解析 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;
}
}
}
关于android - 将自定义 IQProvider 添加到 Asmack 时无法接收新创建的聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939182/