Удебеленият шрифт в цитата съответства на тази част във вашия код:
private DatabaseManager open() throws SQLException {
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
от:https://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html
Подход №1:Използвайте абстрактна фабрика за създаване на инстанция на SQLiteOpenHelper
Декларирайте своя помощник на базата данни като статична променлива на екземпляра и използвайте модела на Abstract Factory, за да гарантирате свойството singleton. Примерният код по-долу трябва да ви даде добра представа как да проектирате правилно класа DatabaseHelper.
Статичният фабричен метод getInstance гарантира, че само един DatabaseHelper ще съществува в даден момент. Ако mInstanceobject не е инициализиран, такъв ще бъде създаден. Ако такъв вече е създаден, той просто ще бъде върнат.
Не трябва да инициализирате своя помощен обект с помощта наnew DatabaseHelper(context).
Вместо това винаги използвайтеDatabaseHelper.getInstance(context), тъй като гарантира, че само един помощник за база данни ще съществува през целия жизнен цикъл на приложението.
public static class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper mInstance = null;
private static final String DATABASE_NAME = "database_name";
private static final String DATABASE_TABLE = "table_name";
private static final int DATABASE_VERSION = 1;
public static DatabaseHelper getInstance(Context ctx) {
// Use the application context, which will ensure that you
// don't accidentally leak an Activity's context.
// See this article for more information: https://bit.ly/6LRzfx
if (mInstance == null) {
mInstance = new DatabaseHelper(ctx.getApplicationContext());
}
return mInstance;
}
/**
* Constructor should be private to prevent direct instantiation.
* make call to static factory method "getInstance()" instead.
*/
private DatabaseHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
}