![](/img/trans.png)
[英]I thought I removed all bugs in my app but this one keeps popping up… Android app
[英]Android app keeps adding database values that I removed
我正在開發一個使用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);
}
*/
}
除非運行代碼,否則SharedPreferences中的firstTime
變量也默認為true,即使它始終應該為false。 調查該問題,清單中的android:allowBackup
屬性似乎設置為true。
從這個答案中得到了我的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.