나는 동일한 문제가 있었으며 웹 및 GreenDAO의 문서를 검색했지만 신뢰할만한 것을 찾지 못했습니다.
그래서 첫 번째 앱 실행에서 코드를 작성했습니다. 이렇게하려면 내 앱이 처음 시작되었는지 확인해야했습니다. 그 일을 위해 나는 this 답을 추천한다.
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();
}
을 그리고 종자 방법 안에 당신은 당신이 삽입 원하는대로 쓸 수 있습니다 : 당신은 여기에 대답에서 코드를 볼 수 있습니다. 당신이 개체의 목록을 삽입 할 경우 insertInTx() 메소드 대신 삽입()를 사용하는 것이
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);
}
참고 : 예를 들어 내가 데이터를 미리 채울하고자하는 "사람"실체를 말한다. 차이점은 here입니다.
나는 이것이 ORM seed 메소드와 다르다는 것을 알고 있지만 greenDAO 코드를 직접 조작하는 것을 제외하고는 다른 대안이 없다고 생각합니다.