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

标签 android xmpp openfire smack instant-messaging

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

我想在 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

提前致谢

最佳答案

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

关于android - 使用 openfire -Android 在 smack 中更新和检索聊天记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606221/

相关文章:

python - 使用 SleekXMPP 连接到 Facebook 聊天

ios - 如何从 XMPP 消息存储中删除聊天记录?

php - 如何在openfire(XMPP) mysql数据库中存储群聊?

resources - Openfire服务器,多个连接,route.all-resources不起作用

android - 字符串中的自动完成功能未在Android Studio(Kotlin)上显示

Android SearchView 小部件 : setIconified[ByDefault or not](false) not working

Android Studio,导入类从gradle文件中消失

android - 是否可以在 NativeScript 中使用 Cordova 插件?

email - 为什么发送电子邮件需要多个邮件服务器跃点?

mysql - 在 OpenFire MySQL 集成中使用带有盐编码的 md5