Я хочу открыть базу данных только один раз, но каким-то образом я не могу ее понять.как открыть базу данных только один раз в проекте android
Мой MainApplication.java определяет, как открыть базу данных:
public static MySQLiteHelper openDatabase() {
if (dbHelper == null) {
dbHelper = new MySQLiteHelper(getInstance().getApplicationContext());
}
database = dbHelper.getWritableDatabase();
return dbHelper;
}
и в моем MainActivity.java я открыть базу данных:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainApplication.openDatabase();
// ...
эта активность имеет некоторые фрагменты, которые имеют некоторые субфрагменты. При попытке доступа к базе данных с одним из тех фрагментов, которые я получаю следующее исключение:
02-14 14:17:46.945: E/AndroidRuntime(29537): FATAL EXCEPTION: main
02-14 14:17:46.945: E/AndroidRuntime(29537): java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/at.itn.android.belegscanner/databases/belegscanner.db
02-14 14:17:46.945: E/AndroidRuntime(29537): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
02-14 14:17:46.945: E/AndroidRuntime(29537): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1156)
02-14 14:17:46.945: E/AndroidRuntime(29537): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
02-14 14:17:46.945: E/AndroidRuntime(29537): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
02-14 14:17:46.945: E/AndroidRuntime(29537): at at.itn.android.belegscanner.db.dao.impl.DataSourceImpl.getAllElements(DataSourceImpl.java:45)
исправление будет делать MainApplication.openDatabase(); каждый раз, когда я создаю фрагмент, но это не может быть правильным способом. Может ли кто-нибудь дать мне подсказку, как это сделать правильно?
ОК Я не думал, что это было так просто. Спасибо, что проблема решена сейчас – Markus