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- コンテンツ プロバイダーを使用している場合は、クエリを実行し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- SELECT COUNT(*)@saurabh が応答で述べているように、rawQuery を実行するには。

于 2013-11-06T15:36:17.010 に答える