2017-01-20 31 views
0

我正在实施Android一对一聊天使用ejabberd。我在ejabberd配置文件中启用了mod_mam模块。现在我可以在mysql数据库中存储聊天。但我无法检索聊天记录。我在我的android应用程序中使用smack库。 我GOOGLE了我的问题,但找不到任何解决方案。 任何人都可以告诉我一个解决方案?在此先感谢。我如何检索从MySQL数据库使用smack客户端聊天记录ejabberd

回答

0

我运用下面的方法来使用smack form mysql来获取归档消息。 它返回DB的最后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; 
} 

希望这有助于。