0

我有一个包含两个值的列表首选项,我想用另一个数组中的值更新这两个值。

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 函数的只是一个键?

4

2 回答 2

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(),但我不确定这是否可能。

于 2012-03-29T04:53:37.743 回答
0

您不能将字符串数组写入 SharedPreferences。你需要改变它。您可以使用

putStringSet(字符串键,设置值)

但这仅从 API 级别 11 开始可用。所以检查一下。或者您可以将数组转换为单个字符串或 JSON 字符串(我在其他地方看到的示例)

查看下面的链接。 是否可以将数组或对象添加到 Android 上的 SharedPreferences

于 2012-03-29T05:06:59.190 回答