问题描述
我正在基于XMPP协议创建Android聊天应用程序。Smack用作XMPP客户库库。在应用程序中存储在SQLITE数据库中。
问题
如何实现消息缓存(例如在Facebook Messenger中完成的)?如果服务器上有新消息,请下载20并显示给用户,如果没有本地数据库显示。如果用户再次向上滚动查看数据库和服务器并显示下一个20条消息。
是否有一个开源示例?
使用sqlite和xmpp mam ext。
的组合- 将新消息存储在数据库中。
- 加载并显示本地数据库中的最后X消息。
- XMPP MAM扩展名将从服务器,过去获取信息,即使它们不在客户的内存中。
- 当用户想查看更多消息时,检查数据库和服务器。
- 缓存驱逐策略以重置/从数据库中删除过去的消息以避免记忆使用。
使用XMPP MAM Ext检索最后20条消息:
int n = 20; // The number of messages to retrieve
MamManager mamManager = MamManager.getInstanceFor(connection);
MamQueryResult mamQueryResult = mamManager.queryArchive(n);
List<Forwarded> forwardedList = mamQueryResult.getForwardedMessages();
for (Forwarded forwarded : forwardedList) {
Stanza stanza = forwarded.getForwardedStanza();
if (stanza instanceof Message) {
Message message = (Message) stanza;
// Display the message to the user or process it as needed
}
}
connection
表示XMPP,n
VAR表示消息的数量,mamManager.queryArchive(n)
从MAM中检索最后的n
消息。
if (stanza instanceof Messages)
检查Message
节的MAM可以像Presence
一样检索。
有关更多信息,请参见XEP-0313。开源示例可以很好地检查Smack,Sqlite和Pix-Art Messanger。