簡體   English   中英

如何使用smack客戶端ejabberd從mysql數據庫檢索聊天歷史記錄

[英]How can i retrieve chat history from mysql db using smack client ejabberd

我正在使用ejabberd實現Android一對一聊天。 我已經在ejabberd配置文件中啟用了mod_mam模塊。 現在,我可以將聊天存儲在mysql DB中。 但是我無法檢索聊天記錄。 我在Android應用程序中使用smack庫 我用谷歌搜索問題,但找不到任何解決方案。 任何人都可以告訴我解決方案嗎?

我使用下面的方法使用smack形式的mysql獲取已歸檔的消息。 它從數據庫返回最后的maxResults結果。 下面的代碼基本上利用現有的庫方法來獲取結果。

public MamManager.MamQueryResult getArchivedMessages(String jid, int maxResults) {

    MamManager mamManager = MamManager.getInstanceFor(connection);
    try {
        DataForm form = new DataForm(DataForm.Type.submit);
        FormField field = new FormField(FormField.FORM_TYPE);
        field.setType(FormField.Type.hidden);
        field.addValue(MamElements.NAMESPACE);
        form.addField(field);

        FormField formField = new FormField("with");
        formField.addValue(jid);
        form.addField(formField);

        RSMSet rsmSet = new RSMSet(maxResults, "", RSMSet.PageDirection.before);
        MamManager.MamQueryResult mamQueryResult = mamManager.page(form, rsmSet);

        return mamQueryResult;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

要以分頁的方式使用以下功能

 public MamManager.MamQueryResult getMessageBefore(String jid, String messageId) {

    MamManager mamManager = MamManager.getInstanceFor(connection);
    try {
        MamManager.MamQueryResult mamQueryResult = 
          mamManager.pageBefore(JidCreate.bareFrom(jid), messageId, pageSize);
        return mamQueryResult;

    } catch (Exception e) {
        e.printStackTrace();
    } 
    return null;
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM