我正在制作一个带有 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/