Pytanie w sprawie contacts, database, android – ograniczenie liczby wierszy w funkcji ContentResolver.query ()

30

Czy istnieje sposób na ograniczenie liczby zwracanych wierszy do kursora? Mam telefon z około 4000 kontaktów, potrzebuję tylko kilku z nich.

to jest kod, którego używam

<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>

Dziennik, który dostaję, jest

<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>

Twoja odpowiedź

1   odpowiedź
36

Aby ograniczyć liczbę wyników w kursorze, spróbuj:

<code>cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " LIMIT 100");
while(cursor.moveToNext()) {
    // something clever
}
</code>
ummmm, pomyłka polegała na przesunięciu kursora, ale dobrze, że nauczyłem się teraz ograniczać kursor. Pytanie brzmiało, jak ograniczyć rozmiar kursora, abym mógł uzyskać ograniczoną liczbę wierszy, nawet jeśli baza danych miała więcej niż określoną liczbę ... user1347945
mamy urządzenie LG-G3, które zostało zaimplementowaneContentProvider w sposób, który nie obsługuje sugerowanej tutaj klauzuli limitu i kończy takie zapytanie:ORDER BY LIMIT 50 thepoosh
Dzięki Sam, całkowicie zapomniałem o przesunięciu kursora, nawet w pętli, Jak głupi! Spróbuję twojej rady i wrócę do ciebie user1347945
Zaktualizowano z ograniczonym przykładem, ale ogranicza się do pierwszych 100 wyników. Prawdziwe pytanie brzmi:w jaki sposób chcesz ograniczyć kursor? Tylko ludzie o imieniu „Bob”? Sam

Powiązane pytania