使用openfire在smack中更新和检索聊天记录-Android

时间:2018-12-04 05:29:07

标签: android xmpp openfire smack instant-messaging

我正在使用smack库和openfire作为服务器制作一个聊天应用程序,但是每次我退出两个用户之间的聊天对话活动并回来时,整个聊天都会被删除。我已经启用了存档设置以在服务器中存储一对一的消息,但是我不知道如何在应用程序中实现它。

我想在recyclerview中显示发件人和收件人在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 :(得分:1)

如果要保留对话历史记录,必须将其保存在数据库中。 MAM仅用于从服务器获取旧会话,例如在您卸载或注销应用程序并决定重新安装并获取旧消息时。 要从服务器获取消息,请确保已启用它,然后转发的消息不应为null。 here is a guide to enable it