Вслед за 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.