Обработка одиночных данных базы данных Android - PullRequest
0 голосов
/ 02 октября 2019

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

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

Все работает отлично, все запросы выполняются хорошо, я в целом доволен, но время от времени (и это редкий случай, который я не могувоспроизводить охотно) я получаю исключение, которое вылетает мое приложение. Там написано

Фатальное исключение: java.lang.IllegalStateException. Невозможно выполнить эту операцию, потому что пул соединений был закрыт.

Выглядит очень просто, верно? Просто не закрывайте связь. Дело в том, что я не знаю. Я никогда не вызываю db.close () или что-то подобное. Когда мне нужен экземпляр базы данных, я вызываю этот метод:

public static synchronized DBHelper getInstance(Context ctx) {
 if (mInstance == null) {
 mInstance = new DBHelper(ctx.getApplicationContext());
 }
 return mInstance;
}

, который должен быть в порядке, теоретически. Я не понимаю, что я делаю неправильно, потому что я никогда не закрываю экземпляр. (должен?) Так что я подумал, что, может быть, есть какая-то сборка мусора, которая просто закрывает все, что считает утечкой, но я не уверен, что это так.

Я нигде не мог найти ничего такого особенного. Что я делаю не так?

1 Ответ

0 голосов
/ 02 октября 2019

попробуй это, может и сработает

public static synchronized DBHelper getInstance(Context ctx) {
if (mInstance == null) {
 mInstance = new DBHelper(ctx);
 }
 return mInstance;
}
...