Не удается найти источник ошибки DatabaseObjectNotClosedException - PullRequest
1 голос
/ 29 января 2011

Мне трудно понять, в чем моя проблема. Я получаю эту ошибку в моей программе, но она не вызывает сбой или что-то в этом роде. У меня есть обновление, которое я хотел бы выпустить, но я не хочу выпускать его из-за этой ошибки, возникающей в определенные моменты времени. Я прочитал все похожие посты по этой ошибке, но ни один не относится к моей ситуации.

Я убедился, что закрываю свои объекты DatabaseHelper и SQLiteDatabase. Я также убедился, что закрываю все свои курсоры. Эта ошибка указывает на мой метод getActiveScheduleInfo, который возвращает объект Cursor. Я удостоверился, что всякий раз, когда я вызываю этот метод, возвращаемый курсор закрывается в блоке Наконец.

Неправильно ли так делать? В моих методах, которые вызывают getActiveScheduleInfo, у меня есть несколько операторов return, основанных на определенных условиях. Таким образом, вместо того, чтобы закрывать курсор перед каждой строкой возврата, я окружаю тестирование условия с помощью Try и закрываю все в моем файле Final.

Все выглядит так, как будто должно работать, поэтому я очень признателен за любую помощь!

Большое спасибо! Пол

1 Ответ

1 голос
/ 02 апреля 2011

Я смог понять это! Я надеюсь, что это поможет кому-то еще с той же проблемой.

Я не делал здесь что-то неправильное по своей сути, а скорее занимал слишком много времени, чтобы закрыть некоторые из моих курсоров. Чтобы дать вам очень краткое представление, я не мог использовать Managed Query или startManagingCursor, так как этот код был в пользовательском классе, а не в деятельности. Я использую Android 2.0 (уровень API 5), поэтому я не использую новый объект CursorLoader.

Я делал следующие шаги:

  1. Открытие базы данных.
  2. Создание нового курсора и выполнение моего запроса.
  3. Перебор курсора и выполнение необходимых задач
  4. Выполнение некоторой другой логики
  5. Закрытие курсора и базы данных в блоке Наконец.

Я обнаружил, что мой шаг 4, выполняющий какую-то другую логику, предшествующий закрытию моего Курсора, вызвал его, из-за отсутствия лучшего термина, тайм-аут и вызвал эту ошибку. С этого момента я читаю необходимые данные из Курсора, а не ОДНА СТРОКА ДАЛЬШЕ, я закрываю Курсор. :) Это полностью устранило эти случайные ошибки, и у меня снова есть чистый код.

Я надеюсь, что это поможет другим людям, имеющим ту же проблему! Береги себя,

Пол

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...