2011-11-07 21 views
5

tengo un proveedor de contenido que tiene acceso a mi base de datos que está bien si lo que necesita para hacer frente a conjuntos de registros pero necesito un método para devolver un entero que indica el número de registros en una tablaMétodo personalizado de Android en el proveedor de contenido para obtener el número de registros en la tabla?

El método es el siguiente

Pero no puedo encontrar ninguna forma de usar esto (o cualquier otro método que no devuelva un cursor) en un proveedor de contenido, ¿dónde es el mejor lugar para poner este método y cómo llamarlo? ?

Obviamente lo que podía hacer la muy mala opción de seleccionar todos los registros con una consulta gestionado y utilizando el resultado cursor.count pero que es una forma altamente ineficiente de hacer frente a este requisito específico

Gracias

Respuesta

10

También puede simplemente usar "count (*)" como una proyección en una llamada a sus proveedores de contenidos URI, como en el siguiente método de ayuda

public static int count(Uri uri,String selection,String[] selectionArgs) { 
    Cursor cursor = getContentResolver().query(uri,new String[] {"count(*)"}, 
     selection, selectionArgs, null); 
    if (cursor.getCount() == 0) { 
    cursor.close(); 
    return 0; 
    } else { 
    cursor.moveToFirst(); 
    int result = cursor.getInt(0); 
    cursor.close(); 
    return result; 
    } 
} 
1

Una forma de poder acceder es usando el método call() en la clase ContentResolver. Parece que no puedo encontrar mucho sobre cómo usar esto en Google, pero supongo que debería hacer que su getRecordCount() devuelva un paquete con su resultado. Por supuesto, lo más fácil de hacer sería algo como lo que se describe en este SO Post.

+0

Gracias, esto abre una serie de otras cuestiones cuál sería la mejor respuesta si hubiera un ejemplo de cómo implementar su solución sugerida. Particularmente, cómo obtener el valor del paquete devuelto y cómo poner el valor en el resultado de la clase de paquete. Si pudiera indicarme un ejemplo de uso de este método, realmente lo agradecería. – jamesc

+0

También tengo problemas para encontrar exactamente cómo usar el método. Vea mi respuesta editada para algunas otras sugerencias. –

+0

¡lol! No solo entonces :) - Creo que puedo usar una consulta administrada, configurar un nuevo uri y tener el resultado de la cuenta de selección * devolver un cursor - Parece la solución más simple. Gracias por su ayuda – jamesc

Cuestiones relacionadas