Xml 消息历史记录请求返回空结果
我使用以下小节获取历史信息:Xml 消息历史记录请求返回空结果,xml,xmpp,monitoring,openfire,Xml,Xmpp,Monitoring,Openfire,我使用以下小节获取历史信息: <iq type='get' id='user1'> <list xmlns='urn:xmpp:archive' with='admin@localhost'> <set xmlns='http://jabber.org/protocol/rsm'> <max>30</max> </set> </list> </iq>
<iq type='get' id='user1'>
<list xmlns='urn:xmpp:archive'
with='admin@localhost'>
<set xmlns='http://jabber.org/protocol/rsm'>
<max>30</max>
</set>
</list>
</iq>
30
答复是:
<iq id="user1" to="user1@localhost/Smack" type="result"></iq>
虽然我可以在Openfire管理控制台上看到两个用户之间的消息。。我使用监控服务
谢谢。解决方案是创建您自己的提供商。。就像这样:
public class HistoryIQProvider implements IQProvider {
public static final String NAMESPACE = "urn:xmpp:archive";
public static final String ELEMENT_NAME = "list";
public static final String CHAT = "chat";
public static final String START_TIME = "start";
private ArrayList<String> startTimes = new ArrayList<String>();
@Override
public IQ parseIQ(XmlPullParser parser) throws Exception {
boolean stop = false;
String name = parser.getName();
Log.d("Parse", "Name: " + name);
while(false == stop)
{
switch (parser.getEventType())
{
case XmlPullParser.START_TAG:
{
if(ELEMENT_NAME.equals(name)) {
/*** START_TAG = 2
*** END_TAG = 3
***/
while (parser.nextTag() == XmlPullParser.START_TAG) {
/*** Stop when chats is finished.. ***/
if(parser.getName().equals("set")) {
break;
}
String startTime = parser.getAttributeValue(1);
startTimes.add(startTime);
parser.nextTag();
}
}
}
case XmlPullParser.END_TAG:
{
stop = ELEMENT_NAME.equals(name);
break;
}
}
}
name = null;
HistoryIQ historyIQ = new HistoryIQ(startTimes);
return historyIQ;
}
}
公共类HistoryyQProvider实现IQProvider{
公共静态最终字符串NAMESPACE=“urn:xmpp:archive”;
公共静态最终字符串元素\u NAME=“list”;
公共静态最终字符串CHAT=“CHAT”;
公共静态最终字符串START\u TIME=“START”;
private ArrayList startTimes=new ArrayList();
@凌驾
公共IQ parseIQ(XmlPullParser)引发异常{
布尔停止=假;
String name=parser.getName();
Log.d(“解析”,“名称:”+Name);
while(false==停止)
{
开关(parser.getEventType())
{
case XmlPullParser.START_标记:
{
if(元素名称等于(名称)){
/***开始标记=2
***结束标记=3
***/
while(parser.nextTag()==XmlPullParser.START_标记){
/***聊天结束后停止***/
if(parser.getName().equals(“set”)){
打破
}
字符串startTime=parser.getAttributeValue(1);
startTimes.add(startTime);
parser.nextTag();
}
}
}
case XmlPullParser.END_标记:
{
停止=元素名称。等于(名称);
打破
}
}
}
name=null;
HistoryIQ HistoryIQ=新的HistoryIQ(开始时间);
返回历史Q;
}
}
历史问题:
public class HistoryIQ extends IQ {
private ArrayList<String> startTimes = new ArrayList<String>();
public HistoryIQ(ArrayList<String> l) {
startTimes = l;
}
@Override
public String getChildElementXML() {
return null;
}
public ArrayList<String> getHistory_Chats() {
Log.d("Parse", "Lists : " + startTimes.size());
return startTimes;
}
}
公共类HistoryIQ扩展IQ{
private ArrayList startTimes=new ArrayList();
公共历史IQ(ArrayList l){
startTimes=l;
}
@凌驾
公共字符串getChildElementXML(){
返回null;
}
公共阵列列表getHistory_Chats(){
Log.d(“解析”,“列表:+startTimes.size());
返回起始时间;
}
}