如何使用sqlite和android按照最新聊天记录的顺序获取聊天列表
这是我根据最新信息获取用户的函数 首先是文本消息,但查询似乎不起作用。有人能帮我吗 在这里如何使用sqlite和android按照最新聊天记录的顺序获取聊天列表,android,sqlite,android-sqlite,chat,Android,Sqlite,Android Sqlite,Chat,这是我根据最新信息获取用户的函数 首先是文本消息,但查询似乎不起作用。有人能帮我吗 在这里 使用Comparator按日期或任何其他字段对消息进行排序 Collections.sort(listMsg,newcomparator(){ 公共整数比较(MessageInfo o1,MessageInfo o2){ 如果(o1.Datetime==null | | o2.Datetime==null) 返回0; 返回o1.Datetime.compareTo(o2.Datetime); } });
使用Comparator按日期或任何其他字段对消息进行排序
Collections.sort(listMsg,newcomparator(){
公共整数比较(MessageInfo o1,MessageInfo o2){
如果(o1.Datetime==null | | o2.Datetime==null)
返回0;
返回o1.Datetime.compareTo(o2.Datetime);
}
});代码>
在布局xml中添加以下代码:
android:stackFromBottom=“true”
android:transcriptMode=“alwaysScroll”您的SQL查询根本不提供任何订单:
select * from friendlist where _id in (select com_id from chat_list order by _id desc)
此处的顺序不是在返回的结果集上定义的,而是在子查询中定义的,该子查询仅用于创建ID集,稍后将扫描该ID集以创建返回的结果集。返回结果集的顺序基本上没有定义
您应该能够使用以下方法解决此问题:
select friendlist.*
from friendlist
join chatlist on friendlist._id=chatlist.com_id
group by chatlist.com_id
order by chatlist._id desc;
--
附:与这个问题不太相关,但我很好奇为什么您选择用键值的HashMap来表示每个项,而不是创建描述数据结构的适当对象。您当前的代码似乎很容易出错,很难调试,并且需要大量使用字符串常量。您的sql查询应该能够以正确的顺序返回数据否它不是以存储在friend_list@nanoct表中的顺序显示数据时,我认为您应该修改sql字符串以满足您的需要。欢迎您进行任何查询建议@nanocno不知道数据库是什么样子的,不能给你一个具体的sql查询拥有一个sql数据库似乎是一个非常糟糕的主意,依赖正在排序的项,但是你建议不要使用sql的强大功能,而是以未定义的顺序将所有项提取到内存中,并用Java代码对它们进行排序。这真的应该是最后的手段。此外,op似乎想要的是用户的列表或人员,按每个用户最新消息的顺序排序,而不是消息列表。涉及两张桌子。
select * from friendlist where _id in (select com_id from chat_list order by _id desc)
select friendlist.*
from friendlist
join chatlist on friendlist._id=chatlist.com_id
group by chatlist.com_id
order by chatlist._id desc;