Jak získám _count v mém poskytovatele obsahu?

hlasů
35

Co bych měl udělat, aby mi poskytovatele obsahu vrátit sloupec _count s počtem záznamů? Dokumentace říká, že je automatické, ale možná, že to trvá jen o nějakém vestavěným poskytovateli obsahu. Spuštění dotazu do databáze se zdá, aby ji vrátit.

Položena 22/01/2009 v 07:27
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
120

Pokud používáte contentProvider pak musíte to udělat count(*) AS count.

Používáte-li cursor.getCount(), že by neměl být tak efektivní jako výše uvedeným přístupem. S cursor.getCount()se načítání všechny záznamy jen proto, aby se počítá. Celý kód by měl vypadat následující -

 Cursor countCursor = getContentResolver().query(CONTENT_URI,
                new String[] {"count(*) AS count"},
                null,
                null,
                null);

        countCursor.moveToFirst();
        int count = countCursor.getInt(0);

Důvodem, proč to funguje, je proto, že android potřebuje název sloupce, aby mohla být označena.

Odpovězeno 09/05/2011 v 11:13
zdroj uživatelem

hlasů
10

Pokud používáte je vrácena. Zavolat získat počet záznamů v návratovém kurzoru.ContentProvider.query()CursorCursor.getCount()

Odpovězeno 22/01/2009 v 23:41
zdroj uživatelem

hlasů
3

Měl jsem podobnými problémy a našel to fungovalo pro mě. V níže uvedeném příkladu jsem se chtěl dostat na počet obrazů od poskytovatele 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);
Odpovězeno 25/03/2011 v 02:23
zdroj uživatelem

hlasů
1

Se cursor.getCount()vám nemůže zaručit, že se vrací skutečný počet položek vrácených. Tam jsou mnohem lepší způsoby:

1 Používáte-li poskytovatelé obsahu, můžete tak učinit dotaz a pomocí Column (_COUNT)součástí BaseColumns pro projekci

@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 Chcete-li provést rawQuery použití SELECT COUNT(*)jako @saurabh říká ve své odpovědi.

Odpovězeno 06/11/2013 v 16:36
zdroj uživatelem

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