Вопрос по android, database – ограничение количества строк в функции ContentResolver.query ()

30

Есть ли способ ограничить количество возвращаемых строк курсором? У меня телефон с 4000 контактами, мне просто нужны некоторые из них.

это код, который я использую

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

Журнал, который я получаю,

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

Ваш Ответ

1   ответ
36

Чтобы ограничить количество результатов в вашем курсоре, попробуйте:

cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " LIMIT 100");
while(cursor.moveToNext()) {
    // something clever
}
Спасибо Сэм, я совсем забыл о перемещении курсора, даже внутри цикла, как глупо! Я попробую ваш совет и вернусь к вам user1347945
Обновлен с примером ограничения, но он ограничен первыми 100 результатами. Настоящий вопросhow Вы хотите ограничить курсор? Только люди по имени "Боб"?
у нас есть устройство LG-G3, которое реализованоContentProvider способом, который не поддерживает предложенное здесь предложение limit и завершает запрос следующим образом:ORDER BY LIMIT 50
хм, ошибка была в том, что курсор действительно перемещался, но хорошо, что я теперь узнал, как ограничить курсор. Вопрос заключался в том, как ограничить размер курсора, чтобы получить ограниченное количество строк, даже если в базе данных было больше указанного мной числа ... user1347945
Обратите внимание, что это не будет работать со всемиContentProviders. Он предполагает конкретную реализацию (SQLite) и предполагает, чтоContentProvider просто передаст значения в SQLite. Это не будет иметь место все время.

Похожие вопросы