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.