Die fettgedruckte Schriftart im Zitat entspricht diesem Teil in Ihrem Code:
private DatabaseManager open() throws SQLException {
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
von:http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html
Ansatz Nr. 1:Verwenden Sie eine abstrakte Fabrik, um den SQLiteOpenHelper zu instanziieren
Deklarieren Sie Ihren Datenbankhelfer als statische Instanzvariable und verwenden Sie das Abstract-Factory-Muster, um die Singleton-Eigenschaft zu gewährleisten. Der folgende Beispielcode sollte Ihnen eine gute Vorstellung davon vermitteln, wie Sie die DatabaseHelper-Klasse richtig entwerfen.
Die statische getInstance-Factory-Methode stellt sicher, dass zu einem bestimmten Zeitpunkt immer nur ein DatabaseHelper vorhanden ist. Wenn das mInstance-Objekt nicht initialisiert wurde, wird eines erstellt. Wenn bereits eine erstellt wurde, wird sie einfach zurückgegeben.
Sie sollten Ihr Hilfsobjekt nicht mit new DatabaseHelper(context)
initialisieren .
Verwenden Sie stattdessen immer DatabaseHelper.getInstance(context)
, da es garantiert, dass nur ein Datenbankhelfer über den gesamten Lebenszyklus der Anwendung hinweg vorhanden ist.
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: http://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);
}
}