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