Android 如何在更新期间迁移SharedReference?

Android 如何在更新期间迁移SharedReference?,android,updates,android-preferences,migrate,Android,Updates,Android Preferences,Migrate,我想将SharedReference从布尔值更改为字符串。默认值为true,将被“启用”。这不是问题,因为它将自动设置。但是如何检查它是否设置为false,然后将新的首选项设置为“disabled”?是否有一个在应用程序更新期间调用的方法可以迁移此首选项? 如果我不迁移它,此首选项的状态将在更新过程中丢失…您可以在将打开的第一个活动中添加一个简单的方法,为您更新首选项值。另外,添加一个检查,使其仅第一次执行 您可以在将打开的第一个活动中添加一个简单的方法,为您更新首选项值。另外,添加一个检查,使

我想将SharedReference从布尔值更改为字符串。默认值为true,将被“启用”。这不是问题,因为它将自动设置。但是如何检查它是否设置为false,然后将新的首选项设置为“disabled”?是否有一个在应用程序更新期间调用的方法可以迁移此首选项?
如果我不迁移它,此首选项的状态将在更新过程中丢失…

您可以在将打开的第一个活动中添加一个简单的方法,为您更新首选项值。另外,添加一个检查,使其仅第一次执行

您可以在将打开的第一个活动中添加一个简单的方法,为您更新首选项值。另外,添加一个检查,使其仅第一次执行

应用程序更新后没有调用任何方法?每次运行代码对我来说似乎都不那么优雅……不,我不认为有一种方法是在更新后专门调用的。但只有当密钥存在时(即更新后应用程序第一次运行时),您才能运行代码更新SharedPref,然后在添加新字符串Pref后删除该密钥。由于密钥不存在,因此以后每次更新代码都不会运行。在应用程序更新后是否没有调用方法?每次运行代码对我来说似乎都不那么优雅……不,我不认为有一种方法是在更新后专门调用的。但只有当密钥存在时(即更新后应用程序第一次运行时),您才可以运行代码来更新SharedPref,然后在添加新字符串Pref后删除该密钥。由于密钥不存在,因此以后每次更新代码都不会运行。
SharedPreferences preferences = // obtain it
String pref;
try {
    pref = preferences.getString("yourPref", "enabled");
} catch (ClassCastException e) {
    // this means the pref is stored as a boolean
    boolean boolPref = preferences.getBoolean("yourPref", true);
    // store it instead as a String
    pref = boolPref ? "enabled" : "disabled";
    preferences.edit().remove("yourPref").putString("yourPref", pref).commit();
}