База данных Seed GreenDao на Android

Я впервые использую GreenDAO для проекта Android, и мне было интересно, как заполнить базу данных для новых пользователей? Скажем, например, у меня есть таблица и хочу, чтобы от имени пользователя было вставлено 5 строк.

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

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

Любая помощь приветствуется, спасибо!

1 ответ

У меня была такая же проблема, я искал в Интернете и документации GreenDAO, но не нашел ничего надежного.

Поэтому я написал код для запуска при первом запуске приложения. Для этого мне нужно было проверить, запускается ли мое приложение впервые. Для этого я рекомендую этот ответ. Вы можете увидеть код этого ответа здесь:

public static void checkFirstRun(Context context) {

    final String PREFS_NAME = "TickTockPrefs";
    final String PREF_VERSION_CODE_KEY = "version_code";
    final int DOESNT_EXIST = -1;

    // Get current version code
    int currentVersionCode = 0;

    try {
        currentVersionCode = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
    } catch (android.content.pm.PackageManager.NameNotFoundException e) {
        // handle exception
        e.printStackTrace();
        return;
    }

    // Get saved version code
    SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    int savedVersionCode = prefs.getInt(PREF_VERSION_CODE_KEY, DOESNT_EXIST);

    // Check for first run or upgrade
    if (currentVersionCode == savedVersionCode) {

        // This is just a normal run
        return;

    } else if (savedVersionCode == DOESNT_EXIST) {

        // TODO This is a new install (or the user cleared the shared preferences)
        seed(context);

    } else if (currentVersionCode > savedVersionCode) {

        // TODO This is an upgrade

    }

    // Update the shared preferences with the current version code
    prefs.edit().putInt(PREF_VERSION_CODE_KEY, currentVersionCode).apply();

}

А внутри метода seed вы можете написать все, что хотите вставить. Например, скажем, у меня есть сущность "Персона", которую я хочу предварительно заполнить данными:

public static void seed(Context context) {

    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "your-db", null);
    SQLiteDatabase db = helper.getWritableDatabase();
    DaoMaster daoMaster = new DaoMaster(db);
    DaoSession daoSession = daoMaster.newSession();

    Person person = new Person();
    person.setName("Jason");
    person.setFamily("Bourne");

    PersonDao personDao = daoSession.getPersonDao();
    personDao.insert(person);
}

Обратите внимание, что если вы хотите вставить список объектов, используйте метод insertInTx() вместо insert(). Вы можете увидеть разницу здесь.

Я знаю, что это отличается от метода семян ORM, но, похоже, нет других альтернатив, кроме как вы сами манипулируете кодом greenDAO.

Другие вопросы по тегам