it-swarm.com.ru

Объект SQLiteConnection для базы данных просочился! Пожалуйста, исправьте вашу заявку

Мое заявление дать мне это предупреждение

Объект SQLiteConnection для базы данных '+ данные + данные + com_example_test + база данных' просочились! Пожалуйста исправьте Ваше приложение, чтобы правильно завершить транзакции и закрыть база данных, когда она больше не нужна.

Но я закрываю объект db и курсор после каждого использования.

        try {
            while (cursor.moveToNext()) {
              ...
            }
        } finally {
            if (cursor != null && !cursor.isClosed())
                cursor.close();
        }

...
    db.close();

Можете ли вы помочь мне понять, в чем проблема? Спасибо !!!

ОБНОВИТЬ! Я пробую это решение из этого поста SQLite Соединение просочилось, хотя все закрыто

и у меня больше нет утечки памяти, это хорошее решение?

38
user3906040

Возможные решения

  • У вас есть not committed the transactions, который вы начали (вы должны Всегда закрывать транзакцию, как только вы начали)
  • Проверьте, закрыли ли вы открытые курсоры, если вы Используете Sqlite (похоже, вы сделали этот шаг из кода, который вы опубликовали)
  • Также переместите блок db.close в finally
  • Вы не вызывали db.close в базе данных до того, как удалили ее с помощью context.deleteDatabase(...), а затем заново создали с помощью dbHelper.getWritableDatabase()
26
Devrath

Просто перетащите этот db.close в блок finally.

7
G. Blake Meike

Возможно, вы забыли удалить точку останова отладки Sample: введите описание изображения здесь

0
steve Rogers

В моем случае ошибка была вызвана тем, что вы пытаетесь загрузить новые данные, и база данных должна быть обновлена.

Я решил создать экземпляр базы данных, вызвав SELECT 0. Это приводит к обновлению базы данных, поэтому после этого я пытаюсь загрузить новые данные. И работал нормально.

0
IgniteCoders