Для цели «создать базу данных при первом запуске» следует использовать SQLiteOpenHelper
, который предлагает вам onCreate()
-метод , который вызывается, когда:
[...] база данных создается впервые.
Сам файл базы данных будет создан для вас (вам не нужно этого делатьвручную).В этом методе вы можете выполнить такие действия, как заполнение базы данных стандартными записями.
Если вы хотите заполнить базу данных информацией, которую вы получаете с вашего сервера, может возникнуть проблема, когда нетДоступно интернет-соединение.
В этом случае я бы проверил, есть ли доступное соединение:
- Если есть, получите информацию.
- Если нет, показать тост или другое уведомление для информирования пользователя.
Чтобы определить, заполнена ли ваша база данных стандартными записями, вы можете использовать версию базы данных, которая также предоставляется SQLiteDatabase
-class:
- При первом создании объекта базы данных вы вызываете конструктор
SQLiteOpenHelper
и передаете его 0
в качестве версии базы данных. - Если вы успешно заполнилив вашей базе данных вы используете
setVersion()
-метод , чтобы изменить его на 1
. - Позже в
onOpen()
-метод , который вызывается, когдабаза данных открыта, уВы можете проверить, была ли база данных заполнена, используя getVersion()
-метод . - Если он заполнен, вызовите супер-метод, чтобы открыть его.
- Если нет, попробуйте заполнить его.
Далее больше, методы getReadableDatabase()
/ getWritableDatabase()
должны быть вызваны из основного потока в любом случае, потому что:
Обновление базы данных может занять много времени, вы не должны вызывать этот метод из основного потока приложенияв том числе ContentProvider.onCreate ().
Таким образом, получение информации из Интернета может осуществляться в onCreate()
и в onOpen()
-методе (если он не был успешным напервая попытка).Вы можете (например) использовать Service для этого.