#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
Комментариев нет:
Отправить комментарий