База данных Android SQLite разделена между действиями

Каков наилучший способ обмена одним SQLite DB между несколькими действиями? Таблицы из БД показаны в ListView, а также удаление / вставка записей. Я слышал о Службе, но не нашел примера для своей проблемы. Теперь у меня есть класс SQLiteOpenHelper для открытия БД. Я закрываю db в OnPause () и открываю его в onResume (). Но я не могу вставлять данные в db из под-активности, smth идет не так.

Solutions Collecting From Web of "База данных Android SQLite разделена между действиями"

Создайте класс приложения для своего приложения. Это будет оставаться активным в памяти до тех пор, пока работает какая-либо часть вашего приложения. Вы можете создать свою БД из метода onCreate и очистить ее в методе onTerminate. (Обратите внимание, что нет гарантии, что onTerminate будет вызван, поэтому вы должны быть осторожны в отношении того, от чего вы зависите. Однако, поскольку база данных SQLite является просто файлом и агрессивно сбрасывается, операция закрытия – это вежливость больше, чем необходимость.)

Вы можете получить доступ к приложению из любого действия через «getApplication», поэтому БД всегда будет доступна вам.

Для получения дополнительной информации см. http://developer.android.com/guide/appendix/faq/framework.html#3 .

Обновить:

В соответствии с запросом, вот пример использования getApplication. Это действительно невероятно просто.

SQLiteDatabase mDB; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDB = ((MyApplication)getApplication()).mDB; } 

Если каждое действие включает этот код, то каждое действие будет иметь свое собственное поле mDB, которое ссылается на один и тот же базовый общий объект БД.

Вы можете сделать это, реализуя класс 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 }