loadermanager loadercallbacks android android-cursorloader

android - loadermanager - loadercallbacks



Limitar la consulta en CursorLoader (3)

Estoy intentando consultar datos de db sqlite a través de CursorLoader. Cuando reviso la documentación en el sitio web del desarrollador de Android, no puedo encontrar la consulta de límite.

CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

¿Cómo puedo implementar límite en CursorLoader?

Gracias por adelantado


La manera hackish:

String sortOrder = "ROWID LIMIT 5"

lo que resultará en ORDER BY ROWID LIMIT 5 . ROWID ordenaría por los identificadores de fila implícitos que mantiene SQLite, muy cerca de lo que sucede cuando no especifica una ordenación en absoluto. No es que esto esté abusando del hecho de que el parámetro de orden no verifica si el valor suministrado es solo un tipo de orden válido. Tipo de ataque de desbordamiento de búfer.

Una mejor manera sería definir los parámetros de Uri .

// query code Uri queryUri = Uri.parse("content://what/ever/items"); queryUri = queryUri.buildUpon().appendQueryParameter("limit", "5").build(); // in ContentProvider String limit = queryUri.getQueryParameter("limit");

Ambos enfoques solo funcionarán si el ContentProvider es compatible con los intentos anteriores de limitar. En realidad, no existe una forma bien definida de limitar o seleccionar ciertos datos de un ContentProvider . Cada ContentProvider viene con su propio contrato, por lo que anteriormente no funcionará con todos los proveedores.


Me doy cuenta de que esto es tarde, pero Sandrstar me dio una idea que era utilizar el Uri que pasas al ContentProvider y añadir el límite como el último segmento de ruta usando.

Uri.withAppendedPath("uri" "/" + limitNumber);

Luego, dentro de su proveedor de contenido, en su emparejador URI asegúrese de hacer coincidir

MATCHER.addURI("authority", "uri" + "/#", matchInt);

Luego, en su consulta, verifique el matchInt con el que hizo coincidir el URI y obtenga el último segmento de ruta

uri.getLastPathSegment();

Cuál será su límite y luego use lo que Sandrstar recomendó con SQLiteQueryBuilder.

Pensé que sería bueno tener una buena técnica para enviar su parámetro al proveedor. ¡Espero que esto ayude!


Puede usar los métodos de SQLiteQueryBuilder cuya capacidad para tener la cláusula LIMIT . O simplemente puedes añadir LIMIT a la cadena de selección tuya.
Además, hay una opción para proporcionar un límite a través de uri (como parte de él) y manejarlo en su ContentProvider.
Parece que CursorLoader no está proporcionando ninguna API para él actualmente.