2016-10-30 155 views
1

如果在首选项中更改了首选项的类型,该怎么办?例如,如果Boolean更改为ListPreferenceAndroid共享首选项类型迁移

谷歌真的没有人想过偏好迁移?

唯一明智的办法,现在似乎版本的喜好和标记为删除喜好与给定的版本改变了..?

+2

只是改变偏好名字,为什么不呢?如果它是“type_pref”调用新的“type_pref1”并忽略之前的 –

回答

1

尝试读取新的数据类型键,在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)) ...只有一次需要。

+0

谢谢:-)我已经注意到ClassCastException的重要性作为可能的设置更改/完整性问题。同时删除旧密钥并使用默认值重新创建它们是我的选择:-) – CeDeROM

0

我做了一些对原材料SharedPreferences工作,并不需要一个PreferenceFragment:

  • 介绍设置的版本。
  • 首选项使用专用xml字符串存储在xml资源中。
  • 拆分代码以加载,迁移,设置应用程序启动时的默认设置。
  • 创建了两个字符串数组版本和密钥 - 记录首选项更改 - 密钥是一个逗号分隔的字符串 - 具有相同的索引,该对保留关于给定版本迁移的信息。
  • 从存储的设置检查当前版本,并确认与存储在字符串数组版本中,如果其目前的版本是旧的(较小的数字)然后删除在键字符串数组具有相同索引提供的密钥(需要字符串分割)并重新使用默认值创建它们。

这给我设置迁移的一个很好的方式,对字符串的XML资源完全基于和更改代码,也应该迁移步步皆以下版本,如果用户不经常更新的应用程序:-)

这也是很好的标记近期的最新更改用户检查迁移..