Как лучше всего разделить одну базу данных SQLite между несколькими действиями? Таблицы из БД отображаются в ListView, а также должно быть выполнено удаление/вставка записей. Я что-то слышал об Сервисах, но не нашел ни одного примера для моей проблемы. Теперь у меня есть класс SQLiteOpenHelper для открытия БД. Я закрываю БД в OnPause() и открываю ее в onResume(). Но я не могу вставить данные в БД из-под-деятельности, что-то идет не так.
База данных Android SQLite разделена между действиями
Ответ 1
Создайте класс приложения для своего приложения. Это будет оставаться активным в памяти до тех пор, пока работает любая часть вашего приложения. Вы можете создать свою БД из метода onCreate и очистить ее в методе onTerminate. (Обратите внимание, что нет гарантии, что onTerminate будет вызван, поэтому вы должны быть осторожны в отношении того, от чего вы зависите. Однако, поскольку база данных SQLite является просто файлом и агрессивно краснеет, операция закрытия - это вежливость больше, чем необходимость.)
Вы можете получить доступ к приложению из любого вида деятельности через "getApplication", поэтому база данных всегда будет доступна вам.
Для получения дополнительной информации см. http://developer.android.com/guide/appendix/faq/framework.html#3.
Update:
В соответствии с запросом здесь приведен пример использования getApplication. Это действительно невероятно просто.
SQLiteDatabase mDB;
@Override protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDB = ((MyApplication)getApplication()).mDB;
}
Если каждое действие включает этот код, то каждое действие будет иметь свое собственное поле mDB, которое ссылается на один и тот же базовый общий объект базы данных.
Ответ 2
Вы можете сделать это, реализуя класс BaseActivity, который расширяется всеми классами Activity в приложении:
public class BaseActivity extends Activity {
protected static SQLiteOpenHelper database;
@Override
protected void onPause() {
// TODO close database
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// TODO open database
}
}
public class OneSubActitivy extends BaseActivity {
// methods using database from BaseActivity
}