使用mam enable从Ejabberd服务器检索消息存档

时间:2018-12-19 12:37:24

标签: xmpp ejabberd smack

所以我无法检索offline-messages,也无法从ejabberd服务器接收消息存档。我正在使用smack的android studio。 我正在尝试使用mamManager来获取archive,并且它不会引发错误,但是总是返回0。打印mamQueryResult.mamFin.toXML().toString())会给我:

loadArchiveMessages: <iq to='user1@localhost/Ghost' from='user1@localhost' id='pEteK-23' type='result'><fin xmlns='urn:xmpp:mam:1' queryid='e3a7c52e-a0a9-443d-91c0-e628237da2a3' complete='true' stable='true'><set xmlns='http://jabber.org/protocol/rsm'><count>0</count></set></fin></iq>

下面(从另一个帖子中)检索档案的代码:

 public void loadArchiveMessages(Jid jid, XMPPTCPConnection xmppTcpConnection){
    try {
        Log.d(TAG, "loadArchiveMessages: "+jid);
        String jidwithoutGhost = jid.toString();
        String[] finalJid = jidwithoutGhost.split("/");
        jid = JidCreate.domainBareFrom(finalJid[0]);
        MamManager mamManager=MamManager.getInstanceFor(xmppTcpConnection);
        MamManager.MamQueryResult mamQueryResult = mamManager.queryArchive(jid);
        Log.d(TAG, "loadArchiveMessages: "+ mamQueryResult.mamFin.toXML().toString());
        List<Forwarded> forwardedMessages=mamQueryResult.forwardedMessages;
        Iterator<Forwarded> forwardedIterator=forwardedMessages.iterator();
        Log.d(TAG, "loadArchiveMessages: "+forwardedMessages.size());
        while (forwardedIterator.hasNext()){
            Forwarded forwarded=forwardedIterator.next();
            Stanza stanza=forwarded.getForwardedStanza();
            if (stanza instanceof Message) {
                String messageId=stanza.getStanzaId();

                String m = ((Message) stanza).getBody();
                Log.d(TAG, "loadArchiveMessages: "+m);
            }
        }
    } catch (XMPPException.XMPPErrorException e) {
        e.printStackTrace();
    } catch (SmackException.NotLoggedInException e) {
        e.printStackTrace();
    } catch (SmackException.NotConnectedException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (SmackException.NoResponseException e) {
        e.printStackTrace();
    } catch (XmppStringprepException e) {
        e.printStackTrace();
    }
}

我认为该错误来自/ghost部分。我该怎么办?我如何解决它。我一直在尝试和搜索,但我真的被卡住了! 预先感谢。

0 个答案:

没有答案
相关问题