![](/img/trans.png)
[英]ContentResolver invalid column error on Android Q (SDK 29)
[英]Android: Invalid column count(*) in ContentResolver query()
我正在開發一個Android應用程序,我想閱讀通話記錄。 我找到了很多方法,但是我想使用更復雜的查詢,例如COUNT,SUM和GROUP BY。
以下作品:
Uri allCalls = Uri.parse("content://call_log/calls");
Cursor cursor = context.getContentResolver().query(allCalls, null, null, null, null);
如果我想使用更高級的語法,如下所示
Uri allCalls = Uri.parse("content://call_log/calls");
String[] columns = new String[] { CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME, "count(" + CallLog.Calls.NUMBER + ") as total" };
String selection = " 0 == 0) (GROUP BY (" + CallLog.Calls.NUMBER + "), (" + CallLog.Calls.CACHED_NAME + ")";
Cursor cursor = context.getContentResolver().query(allCalls, columns, selection, null, "count("+ CallLog.Calls.NUMBER +") DESC");
該應用程序崩潰並顯示以下錯誤:
java.lang.IllegalArgumentException: Invalid column count(number) as total
我嘗試了不同的變體,例如count(*)作為總數,count(*)沒有“ as total”,但仍然沒有。
你有什么主意我在做什么錯嗎?
我正在使用Android API級別19(4.4.2)開發
謝謝
之所以崩潰,是因為您在columns
變量中使用count(" + CallLog.Calls.NUMBER + ") as total
是非法的。 您只能將表示列名的字符串放入contentResolver.query()
參數中,例如CallLog.Calls.NUMBER,僅此而已。 您可以通過運行查詢來獲取計數,然后從返回的游標中獲取計數,但是內容提供者/解析器模型確實不支持group by子句。 我從未嘗試過,但也許其他人知道解決辦法。 但是您的group by子句被解釋為SQL where子句的一部分。 它確實支持order by子句,因此將query
調用替換為以下內容可能會有所幫助:
Cursor cursor = context.getContentResolver().query(allCalls, columns, selection, null, CallLog.Calls.NUMBER + "," + CallLog.Calls.CACHED_NAME);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.