Domanda

Cosa devo fare per fare in modo che il mio fornitore di contenuti restituisca la colonna _count con il conteggio dei record? La documentazione dice che è automatica, ma forse si tratta solo di un provider di contenuti integrato. L'esecuzione di una query nel database sembra non restituirla.

È stato utile?

Soluzione

Se si utilizza ContentProvider.query () viene restituito un cursore . Chiama Cursor.getCount () per ottenere un conteggio dei record nel cursore restituito.

Altri suggerimenti

Se stai utilizzando contentProvider, devi farlo come count (*) AS count .

Se si utilizza cursor.getCount () , ciò non sarebbe efficiente come l'approccio sopra. Con cursor.getCount () stai recuperando tutti i record solo per ottenere conteggi. L'intero codice dovrebbe apparire come segue -

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

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

Il motivo per cui funziona è perché Android ha bisogno di definire un nome di colonna.

Ho avuto un problema simile e ho scoperto che ha funzionato per me. Nell'esempio seguente volevo ottenere il conteggio delle immagini dal provider 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);

Con cursor.getCount () non puoi assicurarti che restituisca il numero reale di articoli restituiti. Ci sono modi molto migliori:

1- Se si utilizzano i provider di contenuti, è possibile eseguire una query e utilizzare la Column (_COUNT) inclusa in BaseColumns per la proiezione

@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- Per eseguire una rawQuery usando SELECT COUNT (*) come dice @saurabh nella sua risposta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top