簡體   English   中英

Android應用程序不斷添加我刪除的數據庫值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM