如何在更新Android应用时清除旧的偏好设置?

Mel*_*Mel 14 android preferences sharedpreferences

我在Google Play市场上有一款应用.由于各种原因,我不打算进入,我已经改变了我的一些偏好的类型.例如,首选项类型是Integer,在最新版本中它现在是String.我想这不是一个好习惯,但不幸的是我不得不这样做.

我担心的是,当有人更新新版本时,他们的应用会因偏好类型发生变化而崩溃.出于这个原因,我想在应用程序更新时清除首选项(再次,我意识到不理想!)

这可能吗?

Bal*_*des 19

SharedPreferences.Editor班有一个clear()功能,什么删除所有存储的偏好(后commit()).您可以创建一个布尔标志,指示是否需要更新:

void updatePreferences() {
    SharedPreferences prefs = ...;
    if(prefs.getBoolean("update_required", true)) {
        SharedPreferences.Editor editor = prefs.edit();
        editor.clear();

        /*....make the updates....*/

        editor.putBoolean("update_required", false)
        editor.commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您需要在访问任何首选项之前在主(首次启动)活动中调用此方法.

编辑:

要获取当前版本(清单中声明的​​versionCode):

int version = 1;
try {
    version = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
} catch (NameNotFoundException e) {
    e.printStackTrace();
}

if(version > ...) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果你想做一些更新操作,只要版本发生变化,你就可以这样做:

void runUpdatesIfNecessary() {
    int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
    SharedPreferences prefs = ...;
    if (prefs.getInt("lastUpdate", 0) != versionCode) {
        try {
            runUpdates();

            // Commiting in the preferences, that the update was successful.
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("lastUpdate", versionCode);
            editor.commit();
        } catch(Throwable t) {
            // update failed, or cancelled
        }
    }
}
Run Code Online (Sandbox Code Playgroud)