Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Узнать количество элементов в sql с помощью cursor

#java #android #sql #sqlite #android_sqlite


В Android приложении имеется SQL-бд.

Задача - получить рандомную запись с помощью класса Random.

Алгоритм:


Делаем необходимый запрос к бд
Получаем количество записей после запроса
Генерируем случайное число
Перемещаемся на случайную запись
Забираем ее

    if(countQuestion!=0){

        Cursor cursor = db.query(EgeDBHelper.QUESTIONS_TABLE, new String[]{EgeDBHelper.COLUMN_ID,
EgeDBHelper.LESSON_ID, EgeDBHelper.QUESTION_TYPE, EgeDBHelper.QUESTION},
                EgeDBHelper.LESSON_ID+"='"+id.toString()+"' AND "+EgeDBHelper.QUESTION_TYPE+"='"+(i+1)+"'", 
                null, null, null, null);//Запрос

        for(int j = 0; j < countQuestion; j++){
            int a = random.nextInt(cursor.getCount());
            cursor.move(a);
            Log.d("Random", String.valueOf(a)+" "+String.valueOf(cursor.getCount()));
            int questionID = cursor.getInt(cursor.getColumnIndex(EgeDBHelper.COLUMN_ID));
            questions.add(new Question(questionID, db));
        }
        cursor.close();
    }

}



Компилятор выдает:

android.database.CursorIndexOutOfBoundsException: Index 42 requested, with a size of 42


Логи:

D/Random: 30 42
D/Random: 27 42
D/AndroidRuntime: Shutting down VM

    


Ответы

Ответ 1



Вы используете не тот метод для установки курсора на позицию. Метод move перемещает курсор на переданное в виде аргумента число позиций от текущего положения, а не устанавливает на указанную позицию. Вам нужен метод moveToPosition

Комментариев нет:

Отправить комментарий