#java #android #sql
#java #Android #sql
Вопрос:
Всякий раз, когда я вызываю эту функцию, она застревает, я смог отследить строку, в которой она застревает, но я новичок в разработке Android и даже в Java, поэтому я не знаю, что не так.
public Movie getMovie( int id ){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_MOVIES, new String[] { KEY_ID,
KEY_TITLE, KEY_DESCRIPTION }, KEY_ID "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
else
return null;
//Create new movie object and fill it with data from the db
Movie movie = new Movie();
movie.setId( Integer.parseInt( cursor.getString(0) ) );
movie.setTitle( cursor.getString(1) );
movie.setDescription( cursor.getString(2) );
return movie;
}
Movie
Класс изменяет заголовок, идентификатор и т.д., только если аргумент не является пустым или . null
Итак, пустой фильм имеет заголовок по умолчанию «Неизвестно». и если я назову setTitle( "" )
его, он не изменится.
Поэтому, что бы ни происходило с данными, которые я получаю из базы данных, у них всегда есть заголовок. Но когда я пытаюсь установить идентификатор, cursor
он зависает. Ничего не происходит. Кто-нибудь знает почему? Кроме того, да, я получаю читаемую базу данных, и курсор не равен нулю. Он застрял в строке with setId()
.
Комментарии:
1. Это кажется маловероятным. Вы прошли через это в отладчике и сделали шаг вперед? Вы уверены, что он не находит какой-то бесконечный цикл в вашем коде setId?
2. @GabeSechan Ну, в написанном мной коде нет бесконечного цикла. Это всего лишь простой метод установки для моего класса Movie. Я проверил это. Я снова попробую отладчик, но в прошлый раз я ничего не нашел.
3. @DerGolem Спасибо. Я получил это из учебника, я не знаком с классом cursor . Но он все равно застревает. Даже когда я комментирую строку идентификатора, две другие строки также застревают, и они являются строками.
4. Вы получаете сообщение об ошибке в вашем LogCat? Если это так, опубликуйте его и давайте проанализируем.
5. Вы уверены, что он застревает, а не генерирует исключение? У вас есть вывод LogCat?
Ответ №1:
Я получил это и почесал голову в течение получаса.
cursor.getString(0)
выбрасывал (и, следовательно, казался застрявшим), потому что у него не было результата. Я не проверял, что cursor.moveToFirst()
это было true
.
Я никогда не видел исключения, поскольку это был код, который вызывался обработчиком исключений. Ура.
У вас такая же ошибка в вашем коде, не забудьте проверить moveToFirst:
if (cursor == null || !cursor.moveToFirst())
return null;
cursor.getString(0);