我正在尝试向Content Provider
查询此数据
scheduledTime='1457093280', user='null', isCompleted='false', id='18'
scheduledTime='1457266080', user='null', isCompleted='false', id='19'
scheduledTime='1457352540', user='null', isCompleted='false', id='20'
scheduledTime='1459155180', user='null', isCompleted='false', id='6'
scheduledTime='1456391940', user='null', isCompleted='true', id='2'
scheduledTime='1456394140', user='null', isCompleted='true', id='1'
scheduledTime='1456395600', user='null', isCompleted='true', id='3'
scheduledTime='1456395600', user='null', isCompleted='true', id='4'
scheduledTime='1456399260', user='null', isCompleted='true', id='5'
scheduledTime='1456918140', user='null', isCompleted='true', id='14'
scheduledTime='1456918320', user='null', isCompleted='true', id='15'
scheduledTime='1456920360', user='null', isCompleted='true', id='16'
scheduledTime='1456921020', user='null', isCompleted='true', id='21'
这就是我查询它的方式。
final Cursor cursor = getContentResolver().query(uri, null, null, null, "isCompleted ASC, scheduledTime ASC");
打印出上面的数据。但是,这就是我想要实现的目标。按isCompleted
顺序排序Ascending
,然后按时间排序。这意味着false Completed
将按最接近重发时间的那个排序,并且true completed
也将按最接近重发时间的那个排序。更像是,18, 19, 20, 21, 16, 15, 14, 5, 4, 3, 1, 2
18, 19, 20
看起来排序很好,但21, 16, 15, 14, 5, 4, 3, 1, 2
。更像是,在ASC顺序中排序false,在DESC中排序为true。任何帮助,将不胜感激。感谢
答案 0 :(得分:1)
我看到两种可能的解决方案。
如果您知道完整和不完整条目之间的转轴时间,则按您的转轴时间之间的绝对距离排序。
假设您的数据透视时间存储在名为Bu Number DeptNumber Period Date count Growth Growth percentage
1 a 1/1 null null null null
1 a 1/1 null null null null
1 b 1/1 1 null null null
的{{1}}变量中,查询将如下所示:
long
对于pivotTime
之后final Cursor cursor = getContentResolver().query(uri, null, null, null,
String.format("isCompleted ASC, abs(scheduledTime - %d) ASC", pivotTime));
的所有条目,scheduledTime
表达式pivotTime
将为正数,其绝对值也为正数。实际上,排序顺序与之前相同。
对于scheduleTime - pivotTime
之前scheduledTime
之前的条目,pivotTime
表达式将变为负数。应用scheduleTime - pivotTime
会将它们变为正数,从而颠倒排序顺序。
解决方案#2 是一种黑客攻击,但是如果不能满足您在完整或不完整条目之间找到时间的条件(或者时间可能重叠),它也可以工作。 / p>
在这种情况下,以下查询应该有效。
abs()
由于final Cursor cursor = getContentResolver().query(uri, null, null, null,
"isCompleted ASC, ((isCompleted == 'false') - 0.5) * scheduledTime ASC");
评估为isCompleted == 'false'
未完成的条目,因此表达式1
会生成(isCompleted == 'false') - 0.5
。因此,不完整的条目将按0.5
排序,等于原始排序。
对于已完成的条目0.5 * scheduledTime
,评估结果为isCompleted == 'false'
,0
结果为(isCompleted == 'false') - 0.5
,有效地还原了排序顺序。