我如何将Android首选项迁移到新版本?



我有一个像这样存储用户偏好的应用程序:

public static final String KEY_PREFS_LOGIN_INFO = "login_info";
public static final String KEY_PREFS_FILE_VERSIONs = "file_versions";
public static final String KEY_PREFS_LOGS = "logs";
public static final String KEY_PREFS_OTHERS = "others";

使用像这样的前缀特定方法:

public static void setFileVersion(String key) {
    SharedPreferences settings = getAppContext().getSharedPreferences(KEY_PREFS_FILE_VERSIONS, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString("current", key);
    editor.commit();
}

,然后像这样检索值:

public static String filesVersion() {
    SharedPreferences settings = getAppContext().getSharedPreferences(KEY_PREFS_FILE_VERSIONS, 0);
    String current = settings.getString("current", "");
    return current;
}

我想做的是将所有的首选项存储在一个位置,这样我就可以使用泛型方法访问它们中的任何一个。如何设置在升级时将值从旧存储位置迁移到新存储位置的方法?我正在寻找类似于SQLiteOpenHelper中的onUpgrade()方法。

我将重写Application。然后在启动时检查共享首选项中存储的版本号,然后根据需要从任何旧密钥遍历到新密钥。

public class MyApplication extends Application {
    private static final int CURRENT_PREFS_VERSION = 2;
    @Override
    public void onCreate() {
        super.onCreate();
        if(filesVersion() != CURRENT_PREFS_VERSION){
            migrate(filesVersion())
        }
    }
    private migrate(int oldVersion){
        switch(oldVersion){
            case 1:
                //get old preference, store new preference
                break;
        }
        setFileVersion(CURRENT_PREFS_VERSION)
    }

最新更新