如何使用smack client ejabberd从mysql数据库中检索聊天记录

时间:2017-01-20 10:57:34

标签: android mysql chat smack

我正在使用 ejabberd 实施Android一对一聊天。我在ejabberd配置文件中启用了mysql个模块。现在我可以在{{1}}数据库中存储聊天。但我无法检索聊天记录。我在我的Android应用程序中使用 smack库。 我搜索了我的问题,但找不到任何解决方案。 谁能告诉我一个解决方案?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我使用smack form mysql编写以下方法来获取存档消息。  它返回DB的最后maxResults个结果。  下面的代码基本上利用现有的库方法来获取retults。

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;
}

希望这有帮助。