Подтвердить что ты не робот

Как получить _count в моем контент-провайдере?

Что мне делать, чтобы заставить моего поставщика контента возвращать столбец _count с количеством записей? В документации говорится, что она автоматическая, но, возможно, она занимает только некоторый встроенный контент-провайдер. Выполнение запроса к базе данных, похоже, не возвращает его.

4b9b3361

Ответ 1

Если вы используете ContentProvider.query(), возвращается Cursor. Вызовите Cursor.getCount(), чтобы получить количество записей в возвращаемом курсоре.

Ответ 2

Если вы используете 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 требуется имя столбца, которое должно быть определено.

Ответ 3

У меня была подобная проблема, и я нашел, что это сработало для меня. В приведенном ниже примере я хотел получить количество изображений от поставщика 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);

Ответ 4

С помощью cursor.getCount() вы не можете гарантировать, что он вернет действительное количество возвращенных элементов. Есть намного лучшие способы:

1- Если вы используете Content Providers, вы можете сделать запрос и использовать столбец (_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;
}

2- Чтобы выполнить rawQuery, используя SELECT COUNT (*), как @saurabh говорит в своем ответе.