Het vetgedrukte lettertype in het citaat komt overeen met dit deel in uw code:
private DatabaseManager open() throws SQLException {
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
van:http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html
Benadering #1:gebruik een abstracte fabriek om de SQLiteOpenHelper te instantiëren
Declareer uw databasehelper als een statische instantievariabele en gebruik het patroon van de abstracte fabriek om de singleton-eigenschap te garanderen. De voorbeeldcode hieronder zou u een goed idee moeten geven over hoe u de DatabaseHelper-klasse correct kunt ontwerpen.
De statische fabriek getInstance-methode zorgt ervoor dat er op een bepaald moment slechts éénDatabaseHelper zal bestaan. Als het mInstanceobject niet is geïnitialiseerd, wordt er een gemaakt. Als er al een is gemaakt, wordt deze eenvoudig teruggestuurd.
U moet uw helper-object niet initialiseren metnew DatabaseHelper(context)
.
Gebruik in plaats daarvan altijdDatabaseHelper.getInstance(context)
, omdat het garandeert dat er slechts één database-helper zal bestaan gedurende de gehele levenscyclus van de applicatie.
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);
}
}