Обновите и получите историю чата в smack с помощью openfire -Android - PullRequest
0 голосов
/ 04 декабря 2018

Я делаю приложение чата с библиотекой smack и openfire в качестве сервера, но каждый раз, когда я прекращаю разговор в чате между двумя пользователями и возвращаюсь, весь чат стирается.Я уже включил настройки архива для хранения одного-одного сообщения на сервере, но я не знаю, как реализовать это в приложении.

Я хочу показать историю чатов в утилите-ревизии отправителем и получателем вrecyclerview.

В настоящее время я реализовал эту функцию, которая вызвала ошибку

private void setChatHistory(String entityBareId) {

    EntityBareJid jid = null;
    try {
        jid = JidCreate.entityBareFrom(entityBareId);
    } catch (XmppStringprepException e) {
        e.printStackTrace();
    }

    MamManager manager = MamManager.getInstanceFor(mConnection);
    MamManager.MamQueryResult r = null;
    try {
        try {
            r = manager.mostRecentPage(jid, 10);
        } catch (SmackException.NotConnectedException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    } catch (XMPPException.XMPPErrorException e) {
        e.printStackTrace();
    } catch (SmackException.NotLoggedInException e) {
        e.printStackTrace();
    } catch (SmackException.NoResponseException e) {
        e.printStackTrace();
    }
    if (r.forwardedMessages.size() >= 1) //printing first of them
    {
        Message message = (Message) r.forwardedMessages.get(0).getForwardedStanza();
        Log.i("mam", "message received" + message.getBody());

        MessagesData data = new MessagesData("send",message.getBody());
        mMessagesData.add(data);
        mAdapter = new ConversationAdapter(mMessagesData);
        recyclerView.setAdapter(mAdapter);

    }

}

Ошибка была

Attempt to read from field 'java.util.List org.jivesoftware.smackx.mam.MamManager$MamQueryResult.forwardedMessages' on a null object reference

В r.forwardedmessages.size()>=1.

Заранее спасибо

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы хотите сохранить историю разговоров, вы должны сохранить их в базе данных.MAM только для извлечения старого разговора с сервера, например, когда вы удаляете или выходите из приложения и решаете переустановить и получить старые сообщения.Для получения сообщений с сервера убедитесь, что вы уже включили его, тогда перенаправленные сообщения не должны быть нулевыми. вот руководство, чтобы включить его .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...