Добавление данных в SQLite при первом запуске приложения

В приложении есть 3 поля типа int. Первому полю значение должно присваиваться при первом запуске, остальные получают значения в процессе работы. Я не совсем понимаю, как внести одно единственное значение только при первом запуске приложения (за первый запуск считается пустая обнуленная БД).

Получается или при каждом запуске первому полю присваивается значение или или чтение происходит сразу из БД.


Ответы (1 шт):

Автор решения: Barmaley

В идеале это делается так:

1)Сначала данные которые надо записать в БД складываете в ресурсы/ассеты, в виде XML или текстового файла - формат на ваше усмотрение

2)Далее пишете собственный helper класс наследник SQLiteOpenHelper, далее при первом открытии БД, будет вызван метод onCreate(), в котором вы создаете свои таблицы и проч.

3)После создания таблиц организуете чтение ресурсов/ассетов и вставку записей в свою БД, приблизительно так:

@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
    database.beginTransaction();
    try {
    } catch (Exception e) {
        database.execSQL("CREATE TABLE IF NOT EXISTS MyTable(Username VARCHAR,Password VARCHAR);");
        //далее чтение из ресурсов/ассетов
        //далее вставка
    }
    database.endTransaction();
}

Update

Наврал конечно. onCreate() будет вызываться каждый раз при запуске приложения. Соответственно, надо немного видоизменить код, а именно при запуске onCreate() проверять флаг первый ли это запуск isFirstRun(), если первый делаем вставку и помечаем, что первый запуск сделан setFirstRun(true), если нет пропускаем. Утилиты для проверки первого запуска такие:

public static boolean isFirstRun(Context context) {
    SharedPreferences settings = context.getSharedPreferences("mypreferences", 0);
    return settings.getBoolean("firstRun", true);
}

public static void setFirstRun(Context context, boolean firstRun) {
    SharedPreferences settings = context.getSharedPreferences("mypreferences", 0);
    SharedPreferences.Editor editor=settings.edit();
    editor.putBoolean("firstRun", firstRun);
    editor.apply();
}
→ Ссылка