想出了一个及其猥琐的方法解决此问题!
此时我的需求是查出Calllog中的号码!相同的自然只出一个结果!
正常的查询是这样的!
Cursor phoneCursor = this.managedQuery(CallLog.Calls.CONTENT_URI ,
new String[] { CallLog.Calls.NUMBER,
CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE },
null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
phoneCursor.moveToFirst();
while (phoneCursor.getPosition() != phoneCursor.getCount()) {
String number = phoneCursor.getString(phoneCursor
.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
String name = phoneCursor.getString(phoneCursor
.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME));
Log.e(TAG, "name:" + name + "number:" + number);
phoneCursor.moveToNext();
}
于是首先想到的要过滤这个最好只在查询的时候就做查出结果后在遍历肯定效率存在问题!
但managedQuery貌似没有提供group by的入口!
首先想到的是在where 子句的入口
Cursor phoneCursor = this.managedQuery(CallLog.Calls.CONTENT_URI ,
new String[] { CallLog.Calls.NUMBER,
CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE },
"group by CallLog.Calls.NUMBER", null, CallLog.Calls.DEFAULT_SORT_ORDER);
但是这样运行时会出现异常
现在的查询语句是
SELECT number, name, type FROM calls WHERE (group by CallLog.Calls.NUMBER) ORDER BY date DESC
把它改装一下
SELECT number, name, type FROM calls WHERE (1=1)group by CallLog.Calls.NUMBER () ORDER BY date DESC
后面那个()会出现错误那我一不做二不休
SELECT number, name, type FROM calls WHERE (1=1) group by number --() ORDER BY date DESC
于是我成功的加入了group by查询
Cursor phoneCursor = this.managedQuery(CallLog.Calls.CONTENT_URI ,
new String[] { CallLog.Calls.NUMBER,
CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE },
"1=1) group by "+CallLog.Calls.NUMBER+" -- (", null, CallLog.Calls.DEFAULT_SORT_ORDER);