簡體   English   中英

Android:ContentResolver查詢中的無效列數(*)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM