limiter le nombre de lignes dans un ContentResolver.query() de la fonction
Est-il un moyen de limiter le nombre de lignes renvoyées à un curseur?
J'ai un téléphone avec près de 4000 contacts, j'ai juste besoin de certains d'entre eux.
c'est le code que j'utilise
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");
}
le Journal que je reçois est
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
Vous devez vous connecter pour publier un commentaire.
De limiter le nombre de résultats dans votre curseur à essayer:
ContentProvider
s. Il suppose une mise en oeuvre particulière (SQLite) et suppose que leContentProvider
va juste passer les valeurs le long de SQLite. Ce ne sera pas le cas tout le temps.ContentProvider
d'une manière qui ne prend pas en charge la clause limit suggéré ici et la fin de la requête comme ceci:ORDER BY LIMIT 50
content://sms/inbox
trop.