首页 > 解决方案 > Android“count(*) AS c”投影似乎不起作用,至少在使用 ContactsContract.Contacts.ContentUri

问题描述

跟进https://stackoverflow.com/a/5935434,我试图以最有效的方式从 Android 的通讯录中获取联系人项目的总数。

我知道我们可以选择所有联系人,然后统计结果如下:

int count = 0;
var ctx = Application.Context;
var countCursor = ctx.ApplicationContext.ContentResolver.Query(
    ContactsContract.Contacts.ContentUri,
    null,
    null,
    null,
    null
);
if (countCursor != null)
{
    count = countCursor.Count;
    countCursor.Close();
}
return count;

但我在想,只有请求计数才能提高效率并消耗更少的设备资源。

但是,就像在https://stackoverflow.com/a/5935434/1990692中一样,下面的代码:

int count = 0;
var ctx = Application.Context;
var countCursor = ctx.ApplicationContext.ContentResolver.Query(
    ContactsContract.Contacts.ContentUri,
    new String[] { "COUNT(*) AS c" },
    null,
    null,
    null
);
if (countCursor != null) {
    countCursor.moveToFirst();
    count = countCursor.getInt(0);
    countCursor.Close();
}
return count;

不起作用并抛出Java.Lang.IllegalArgumentException以下消息:Non-token detected in 'count(*) AS c'

我究竟做错了什么?

我正在使用 Xamarin.Android,因此这是 c#,但我认为这在原生 Android 的 java 中是相同的。

标签: c#androidxamarinaddressbook

解决方案


推荐阅读