Android应用不断添加我删除的数据库值

时间:2017-05-23 14:15:01

标签: android database sqlite android-sqlite

我正在开发一个使用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);
    }
    */
}

1 个答案:

答案 0 :(得分:0)

除非代码已运行,否则SharedPreferences中的firstTime变量也默认为true,即使它始终为false。查看该问题,似乎清单中的android:allowBackup属性设置为true。

this回答我的解决方案。