Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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
}