Тогда не беспокойтесь о его закрытии. "
я есть приложение, которое хранит некоторые данные в БД SQLite. Также я делаю большой запрос в моем приложении. У меня около 15 операций. И почти все используют БД для запроса данных. Но я открываю свою БД в каждом действии и закрываю ее в onDestroy {...} каждого действия.
Проблема в том, что onDestroy {...} может никогда не вызываться, и иногда мое приложение остается включенным в течение длительного времени, и я переключаюсь с активности на другое открытие во много раз для моей БД.
И иногда я получаю сообщения об ошибках, такие как: база данных слишком много раз открывается и никогда не закрывается.
Я бы попытался закрыть свою БД точно после того, как получу из нее свои данные и закрою ее ... перейдя к следующему занятию и снова открыв и т. Д. ..... Но проблема в том, что в некоторых действиях я возвращаюсь другие действия .... закрытие моей БД и возвращение к этой деятельности приведет к большому закрытию Силы.
Я хочу открыть мою базу данных в начале моего приложения и закрыть ее в конце, но я столкнулся с двумя проблемами:
1. Должен ли я сделать свой класс SQLiteOpenHelper одноэлементным? ... получить его экземпляр .. открыть его в моем первом действии, а затем в моих следующих действиях просто получить экземпляр моей БД, который уже открыт / ???
2. Где конец моего приложения? Как я должен знать, где конец моего приложения и где закрыть мою БД.
РЕДАКТИРОВАТЬ:
public class DBAdapter extends SQLiteOpenHelper {
public DBAdapter(Context context) {
super(context, DATABASE_NAME, null, 1);
this.myContext = context;
}
public void openDataBase() throws SQLException {
String myPath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
}
Это фрагмент кода из моего класса, который управляет моей базой данных. Чтобы создать этот синглтон, я должен использовать конструктор, например:
private DBAdapter()
{
//nothing in here
}
Но это не определено для SQLiteOpenHelper
РЕДАКТИРОВАТЬ ФИНАЛ: Вот как я сделал это в соответствии с советами zirael:
пакет com.Server_1;
импорт android.app.Application;
открытый класс MyApplication расширяет приложение {
private static DBAdapter db;
public void onCreate()
{
db=new DBAdapter(getApplicationContext());
db.createDatabase();
db.openDataBase();
}
public static DBAdapter getDatabaseAdapter()
{
return db;
}
}
В каждой деятельности, где мне нужно подключение к БД, я делаю это:
MyApplication myApplication = (MyApplication) this.getApplication ();
DBAdapter db = myApplication.getDatabaseAdapter ();
И наконец мой манифест выглядит так:
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:name=".MyApplication"
android:debuggable="true">