c# - 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 中是相同的。
解决方案
推荐阅读
- socket.io - Socket.io 不会连接 next.js 环境变量
- python - 在python中同时运行多个协程[Discord.py]
- kotlin - 如何将适配器附加到我的片段?
- discord.js - 命令未运行且没有错误消息
- kubernetes - Kubernetes 删除的 pod IP 地址由 rabbitmq 引用,它仍在接受消息
- hadoop - 跨多个 aws 区域部署 hadoop 集群
- html - 在 vue 中获取引导崩溃的当前状态
- ide - 如何在 Geany 中缩进换行?
- python - 如何逐步消除python列表中的项目?
- php - sql使用准备好的语句更新foreach循环中的多列