我正在开发一个使用RecyclerView的应用程序,所以我制作了一堆虚拟对象来添加到RecyclerView,这样我就可以看到它充满时的样子。
问题是,我删除了代码,卸载了应用程序,然后重新安装它(清除数据库),但虚拟对象不断出现。如果我删除它们,然后从我的计算机再次运行该应用程序,所有对象都会返回。
在安装应用程序时,虚拟对象也只能运行一次,因此运行按钮不应该添加对象。
这是我的OpenDbHelper,其中添加了对象:
OpenDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
starterContext = context;
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(GoalsContract.Goals.SQL_CREATE_GOALS);
db.execSQL(CategoriesContract.Categories.SQL_CREATE_CATEGORIES);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(starterContext);
if(!prefs.getBoolean("firstTime", false)) {
addDefaultData(db);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.apply();
}
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(GoalsContract.Goals.SQL_DELETE_GOALS);
db.execSQL(CategoriesContract.Categories.SQL_DELETE_CATEGORIES);
onCreate(db);
}
private void addDefaultData(SQLiteDatabase db) {
String[] defaultCategories = {"Work", "Fitness", "Family", "Finance"};
for(String currentName : defaultCategories) {
ContentValues values = new ContentValues();
values.put(CategoriesContract.Categories.COLUMN_NAME_NAME, currentName);
db.insert(CategoriesContract.Categories.TABLE_NAME, null, values);
}
/*
Goal loseWeight = new Goal();
loseWeight.setGoalName("Lose weight");
loseWeight.setDueDate(Utility.formatStringToGregorian("05/19/2017 00:00"));
loseWeight.setCategory("Fitness");
loseWeight.setNotes("");
Goal doTaxes = new Goal();
doTaxes.setGoalName("Do my taxes");
doTaxes.setDueDate(Utility.formatStringToGregorian("04/01/2018 00:00"));
doTaxes.setCategory("Work");
doTaxes.setNotes("Hire accountant.");
ContentValues values = Utility.goalObjectToContentValues(loseWeight);
db.insert(GoalsContract.Goals.TABLE_NAME, null, values);
values = Utility.goalObjectToContentValues(doTaxes);
db.insert(GoalsContract.Goals.TABLE_NAME, null, values);
for (int x = 0; x < 15; x++) {
ContentValues values = new ContentValues();
values.put(GoalsContract.Goals.COLUMN_NAME_GOAL_NAME, "I'm dummy #" + (x+1));
values.put(GoalsContract.Goals.COLUMN_NAME_DATE_AND_TIME, "06/19/2017 00:00");
values.put(GoalsContract.Goals.COLUMN_NAME_CATEGORY, "Work");
db.insert(GoalsContract.Goals.TABLE_NAME, null, values);
}
*/
}
答案 0 :(得分:0)
除非代码已运行,否则SharedPreferences中的firstTime
变量也默认为true,即使它始终为false。查看该问题,似乎清单中的android:allowBackup
属性设置为true。
从this回答我的解决方案。