我有一个应用程序,我正在存储这样的用户首选项:
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";
使用这样的pref特定方法:
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()方法的东西。
答案 0 :(得分:4)
我会覆盖应用程序。然后在启动时检查共享首选项中存储的版本号,然后根据需要执行从任何旧密钥到新密钥的遍历。
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)
}