update studio proveedor definicion content contenido cache android count android-contentprovider

android - studio - ¿Cómo obtengo la_count en mi proveedor de contenido?



proveedor de contenido video (4)

Tuve un problema similar y encontré que esto funcionó para mí. En el siguiente ejemplo, quería obtener el recuento de imágenes del proveedor de 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);

¿Qué debo hacer para que mi proveedor de contenido devuelva la columna _count con el recuento de registros? La documentación dice que es automática, pero tal vez solo se trata de algún proveedor de contenido incorporado. Ejecutar una consulta a la base de datos parece no devolverlo.


Si está utilizando ContentProvider.query() se devuelve un Cursor . Llame a Cursor.getCount() para obtener un recuento de registros en el cursor devuelto.


Con cursor.getCount() no puede garantizar que devuelve la cantidad real de elementos devueltos. Hay formas mucho mejores:

1- Si está utilizando Proveedores de contenido, puede hacer una consulta y usar la Column (_COUNT) incluida en Basecolumnas para su proyección

@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- Para hacer una materia prima usando SELECT COUNT(*) como dice @saurabh en su respuesta.


Si está utilizando contentProvider, debe hacerlo como count(*) AS count .

Si usa cursor.getCount() , eso no sería tan eficiente como el enfoque anterior. Con cursor.getCount() está cursor.getCount() todos los registros solo para obtener recuentos. El código completo debería verse como sigue:

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

La razón por la que esto funciona es porque Android necesita un nombre de columna para ser definido.