如果在首选项中更改了首选项的类型,该怎么办?例如,如果Boolean
更改为ListPreference
?Android共享首选项类型迁移
谷歌真的没有人想过偏好迁移?
唯一明智的办法,现在似乎版本的喜好和标记为删除喜好与给定的版本改变了..?
如果在首选项中更改了首选项的类型,该怎么办?例如,如果Boolean
更改为ListPreference
?Android共享首选项类型迁移
谷歌真的没有人想过偏好迁移?
唯一明智的办法,现在似乎版本的喜好和标记为删除喜好与给定的版本改变了..?
尝试读取新的数据类型键,在ClassCastException
异常的情况下,删除“旧”键,并创建具有相同的名称,但新类型新的密钥。事情是这样的:
SharedPreferences prefs;
String key = "key";
prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (prefs.contains(key)) {
// key exists, so tetermine it's type
try {
prefs.edit().get<old_type_name>(key, <default_old_type_value>);
} catch (Exceprtion e) {
if (e instanceOf ClassCastException) {
prefs.edit().remove(key).apply();
}
}
}
// we are here if no key exists or key removed
prefs.edit().put<new_type_name>(key, <new_type_value>).apply();
,如果做第一个应用程序开始检查if (prefs.contains(key)) ...
只有一次需要。
谢谢:-)我已经注意到ClassCastException的重要性作为可能的设置更改/完整性问题。同时删除旧密钥并使用默认值重新创建它们是我的选择:-) – CeDeROM
我做了一些对原材料SharedPreferences工作,并不需要一个PreferenceFragment:
这给我设置迁移的一个很好的方式,对字符串的XML资源完全基于和更改代码,也应该迁移步步皆以下版本,如果用户不经常更新的应用程序:-)
这也是很好的标记近期的最新更改用户检查迁移..
只是改变偏好名字,为什么不呢?如果它是“type_pref”调用新的“type_pref1”并忽略之前的 –