我应该怎么做才能让我的内容提供者返回带有记录数的 _count 列?文档说它是自动的,但也许它只需要一些内置的内容提供程序。对数据库运行查询似乎不会返回它。
J. Pablo Fernández
问问题
15910 次
4 回答
127
如果您使用的是 contentProvider,那么您必须像count(*) AS count
.
如果您使用cursor.getCount()
,那将不如上述方法有效。与cursor.getCount()
您一起获取所有记录只是为了计数。整个代码应如下所示 -
Cursor countCursor = getContentResolver().query(CONTENT_URI,
new String[] {"count(*) AS count"},
null,
null,
null);
countCursor.moveToFirst();
int count = countCursor.getInt(0);
之所以可行,是因为 android 需要定义一个列名。
于 2011-05-09T10:13:36.730 回答
16
如果您使用ContentProvider.query()
的Cursor
是返回。调用Cursor.getCount()
以获取返回游标中的记录数。
于 2009-01-22T22:41:40.367 回答
4
我有一个类似的问题,发现这对我有用。在下面的示例中,我想从 MediaStore 提供程序获取图像计数。
final String[] imageCountProjection = new String[] {
"count(" + MediaStore.Images.ImageColumns._ID + ")",
};
Cursor countCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
imageCountProjection,
null,
null,
null);
countCursor.moveToFirst();
int existingImageCount = countCursor.getInt(0);
于 2011-03-25T01:23:48.493 回答
1
cursor.getCount()
不能保证它返回的是真实的返回项目数。有很多更好的方法:
1-如果您使用的是 Content Providers,您可以进行查询并使用Column (_COUNT)
BaseColumns 中包含的内容进行投影
@Override
public Cursor query(SQLiteDatabase db, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
...
projection = new String[] {
ContentContract.NotificationCursor.NotificationColumns._COUNT,
};
...
Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder);
return cursor;
}
SELECT COUNT(*)
2- 使用@saurabh 在他的回复中说的那样做一个 rawQuery 。
于 2013-11-06T15:36:17.010 回答