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

голоса
35

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

Задан 22/01/2009 в 07:27
источник пользователем
На других языках...                            


4 ответов

голоса
120

Если вы используете 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);

Причина, почему это работает, потому что андроид нужно имя столбца быть определено.

Ответил 09/05/2011 в 11:13
источник пользователем

голоса
10

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

Ответил 22/01/2009 в 23:41
источник пользователем

голоса
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);
Ответил 25/03/2011 в 02:23
источник пользователем

голоса
1

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

1- Если вы используете контент - провайдеров, вы можете сделать запрос и использовать 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;
}

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

Ответил 06/11/2013 в 16:36
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more