Запустите приложение / активность в первый раз - PullRequest
0 голосов
/ 24 августа 2011

Мне нужно распознать первый запуск моего приложения или действия.

В настоящее время мне нужно получить некоторую информацию с сервера, создать локальную базу данных и сохранить информацию в ней. Каков наилучший способ сделать это?

  1. Создайте любые предпочтения, например FirstLaunch и установите для него true \ false.
  2. Проверьте, существует ли моя база данных.
  3. Что-то еще?

PS. Все вызовы сервера должны быть в одной транзакции. Ormlite поддерживает транзакции? Спасибо.

Ответы [ 4 ]

3 голосов
/ 24 августа 2011

Для цели «создать базу данных при первом запуске» следует использовать SQLiteOpenHelper, который предлагает вам onCreate() -метод , который вызывается, когда:

[...] база данных создается впервые.

Сам файл базы данных будет создан для вас (вам не нужно этого делатьвручную).В этом методе вы можете выполнить такие действия, как заполнение базы данных стандартными записями.


Если вы хотите заполнить базу данных информацией, которую вы получаете с вашего сервера, может возникнуть проблема, когда нетДоступно интернет-соединение.

В этом случае я бы проверил, есть ли доступное соединение:

  • Если есть, получите информацию.
  • Если нет, показать тост или другое уведомление для информирования пользователя.

Чтобы определить, заполнена ли ваша база данных стандартными записями, вы можете использовать версию базы данных, которая также предоставляется SQLiteDatabase -class:

  • При первом создании объекта базы данных вы вызываете конструктор SQLiteOpenHelper и передаете его 0 в качестве версии базы данных.
  • Если вы успешно заполнилив вашей базе данных вы используете setVersion() -метод , чтобы изменить его на 1.
  • Позже в onOpen() -метод , который вызывается, когдабаза данных открыта, уВы можете проверить, была ли база данных заполнена, используя getVersion() -метод .
    • Если он заполнен, вызовите супер-метод, чтобы открыть его.
    • Если нет, попробуйте заполнить его.

Далее больше, методы getReadableDatabase() / getWritableDatabase() должны быть вызваны из основного потока в любом случае, потому что:

Обновление базы данных может занять много времени, вы не должны вызывать этот метод из основного потока приложенияв том числе ContentProvider.onCreate ().

Таким образом, получение информации из Интернета может осуществляться в onCreate() и в onOpen() -методе (если он не был успешным напервая попытка).Вы можете (например) использовать Service для этого.

1 голос
/ 24 августа 2011

Если вы хотите решить эту проблему с базой данных: Создайте базу данных с таблицей MyDatabasaVersion и сохраните свою версию в одной строке, например, значение db_version по умолчанию равно 0. При первом запуске приложения вы проверяете db_version, если 0 вам нужно запустить синхронизацию, после ее завершения установите db_version в 1 .

0 голосов
/ 24 августа 2011

вы должны попробовать первый вариант Create any preferences for example FirstLaunch and set true \ false to it.

0 голосов
/ 24 августа 2011

Самым простым способом должны быть общие настройки.Вы можете вызывать его везде из контекста приложения, и вы можете помещать в него логические значения.

Здесь - все хранилища Android.

...