我正在使用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
。
预先感谢
答案 0 :(得分:1)
如果要保留对话历史记录,必须将其保存在数据库中。 MAM仅用于从服务器获取旧会话,例如在您卸载或注销应用程序并决定重新安装并获取旧消息时。 要从服务器获取消息,请确保已启用它,然后转发的消息不应为null。 here is a guide to enable it。