我有一个包含两个值的列表首选项,我想用另一个数组中的值更新这两个值。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Resources resources = this.getResources();
String languageData = prefs.getString("languageAlias", " ");
String[] languageAlias = resources.getStringArray(R.array.languageAlias);
String[] voiceData = resources.getStringArray(R.array.voiceData);
int a = 0;
for(a=0; a<languageAlias.length; a++){
if(languageData.equals(languageAlias[a]))
{
//this is where I have problems
prefs.edit().putString("voiceAlias", voiceData[2*a]);
prefs.edit().commit();
break;
}
我已经能够使用它直到我必须使用puString命令进行更改和提交。另外我如何指定列表首选项中我想要更改的项目,因为我需要传递给putString函数的所有项都是键?
答案 0 :(得分:0)
之后:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
你需要添加:
SharedPreferences.Editor editor = prefs.edit();
然后代替
prefs.edit().putString("voiceAlias", voiceData[2*a]);
prefs.edit().commit();
使用
editor.putString("voiceAlias", voiceData[2*a]);
editor.commit();
edit()上的文档说:
为这些偏好设置新的编辑器
这意味着每次调用prefs.edit()
时,它都会创建一个新的Editor
对象,因此当您使用prefs.edit().putString(...)
添加字符串时以及使用prefs.edit().commit()
提交时,您就是引用两个新的,不同的Editor
对象。
我相信你也可以做prefs.edit().putString(...).commit()
,但我不确定这是否可行。
答案 1 :(得分:0)
您不能将String数组写入SharedPreferences。你需要改变它。你可以使用
putStringSet(字符串键,设置值)
但这只能从API Level 11开始提供。所以检查一下。或者你可以将你的数组转换为单个字符串或JSON字符串(我在其他地方看到的例子)
请查看以下链接。 Is it possible to add an array or object to SharedPreferences on Android