2017-01-20 2 views
0

Я использую один-один чат для Android, используя ejabberd. Я включил модули mod_mam в файле конфигурации ejabberd. Теперь я могу хранить чат в базе данных mysql. Но я не могу получить историю чата. Я использую smack library в моем приложении для Android. Я искал свою проблему, но не нашел решения. Может ли кто-нибудь сказать мне решение? Спасибо заранее.Как получить историю чата из mysql db с помощью smack-клиента ejabberd

ответ

0

Я worte метод ниже, чтобы получить архивные сообщения, используя 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; 
} 

Надеется, что это помогает.

Смежные вопросы