Pregunta sobre contacts, android, database – número limitado de filas en una función ContentResolver.query ()

30

¿Hay una manera de limitar el número de filas devueltas a un cursor? Tengo un teléfono con aproximadamente 4000 contactos, solo necesito algunos de ellos.

este es el código que estoy usando

<code>        db = new dBHelper(this);
        ContentResolver cr = getContentResolver();
        Cursor cursor;

        cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " ASC");
        Log.i(TAG, CLASSNAME + " got contacts entries");
        for (int it = 0; it <100 ; it++){//cursor.getCount()
            Log.i(TAG, CLASSNAME + " getting string");
            String mytimes_contacted = cursor.getString(cursor.getColumnIndex(dBHelper.times_contacted)); 
            Log.i(TAG, CLASSNAME + " done from the string");
        }
</code>

el registro que estoy recibiendo es

<code>I/Check(11506): [ContactsPicker] got contacts entries
I/Check(11506): [ContactsPicker] getting first string
D/AndroidRuntime(11506): Shutting down VM
W/dalvikvm(11506): threadid=1: thread exiting with uncaught exception (group=0x2aac8578)
D/dalvikvm(11541): GC_CONCURRENT freed 923K, 46% free 4000K/7303K, external 1685K/2133K, paused 1ms+8ms
E/AndroidRuntime(11506): FATAL EXCEPTION: main
E/AndroidRuntime(11506): java.lang.RuntimeException: Unable to start activity ComponentInfo{~~my package name~~}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 3537
</code>

Tu respuesta

1   la respuesta
36

<code>cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " LIMIT 100");
while(cursor.moveToNext()) {
    // something clever
}
</code>
De acuerdo con CommonsWare, esta es una solución hacker. En muchas situaciones puedes usar unselección para minimizar los resultados devueltos. Prueba esto primero Georgios Pligoropoulos
Esta solución es válida solo si necesitas 4000 (ContactNameorden por nombre asc), si necesita primero 4000 (orden insertado), entonces no funcionará porque proporcionará los datos ordenados según ContactName Vishal Pandey
Esto funciona para el proveedor de SMScontent://sms/inbox también. v.ladynev
Gracias Sam, me olvidé totalmente de mover el cursor, incluso dentro del bucle, ¡Qué estúpido! Voy a probar tu consejo y volveré a ti user1347945

Preguntas relacionadas