42

我应该怎么做才能让我的内容提供者返回带有记录数的 _count 列?文档说它是自动的,但也许它只需要一些内置的内容提供程序。对数据库运行查询似乎不会返回它。

4

4 回答 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 回答