私は同じ問題を抱えていて、Web と 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 メソッド内で、挿入したいものを何でも記述できます。たとえば、データを事前入力したい "Person" エンティティがあるとします。
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);
}
エンティティのリストを挿入する場合は、insert() の代わりに insertInTx() メソッドを使用することに注意してください。ここで違いを見ることができます。
これが ORM シード メソッドとは異なることはわかっていますが、greenDAO コードを自分で操作する以外に他の方法はないようです。