Проекция «count (*) AS c») Android не работает, по крайней мере, с ContactsContract.Contacts.ContentUri - PullRequest
0 голосов
/ 03 ноября 2018

Вслед за 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 #, но я предполагаю, что это будет то же самое в Java для родного Android.

...