База данных Android SQLite, используемая совместно - PullRequest
10 голосов
/ 10 октября 2010

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

Ответы [ 2 ]

20 голосов
/ 10 октября 2010

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

Вы можете получить доступ к приложению из любого действия через «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, которое ссылается на один и тот же базовый общий объект БД.

3 голосов
/ 14 октября 2010

Вы можете сделать это, реализуя класс 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...