问题描述
我正在创建基于XMPP协议的Android聊天应用程序。在应用程序中,使用Smack作为XMPP客户端库,并将消息存储在SQLite数据库中。
问题
如何实现消息缓存(例如Facebook Messenger中所做的)?如果服务器上有新消息,则下载20条并显示给用户;如果没有,则从本地数据库中显示。如果用户再次向上滚动,则检查数据库和服务器,并显示下一批20条消息。
是否有开源示例可用?
我正在创建基于XMPP协议的Android聊天应用程序。在应用程序中,使用Smack作为XMPP客户端库,并将消息存储在SQLite数据库中。
如何实现消息缓存(例如Facebook Messenger中所做的)?如果服务器上有新消息,则下载20条并显示给用户;如果没有,则从本地数据库中显示。如果用户再次向上滚动,则检查数据库和服务器,并显示下一批20条消息。
是否有开源示例可用?
使用XMPP MAM扩展程序检索最近的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
变量表示消息数量,mamManager.queryArchive(n)
从 MAM 检索最后的 n
条消息。
if (stanza instanceof Messages)
检查 Message
数据包,因为 MAM 可以像 Presence
一样检索它。
请参阅XEP-0313以获取更多信息。 开源示例可以作为检查的好材料,例如Smack, SQLite和Pix-Art Messanger。