База данных 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.