Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用sqlite和android按照最新聊天记录的顺序获取聊天列表_Android_Sqlite_Android Sqlite_Chat - Fatal编程技术网

如何使用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;