我正在尝试通过在用户按下按钮时将其添加到编辑器来优先保存字符串。然后我试图从首选项中恢复字符串并将其转换为arrayList。
this.context = getApplicationContext();
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
int size = updatableList.size();
editor.putInt("list_size", size);
for (int i = 0; i < size; i++) {
((SharedPreferences) editor).getString("list_"+i, updatableList.get(i));
}
editor.commit();
稍后在申请中
updatableList.add(picturePath);
i=i++;
//saving path to preference********
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
((Editor) editor).putString("list_"+i, picturePath);
editor.commit();
它说应用程序后面的prefs是未使用的,我认为这很奇怪,因为我认为它告诉它putString。应用程序到达那里时崩溃了。为什么以后在应用程序中使用我的prefs?
答案 0 :(得分:0)
您是否尝试getString
或putString
for (int i = 0; i < size; i++) {
((SharedPreferences) editor).getString("list_"+i, updatableList.get(i));
}
在此之前编码代码,执行putInt。
SharedPreference的工作方式类似于键值对。如果未找到密钥,则返回默认值。
从上面的代码中,您首先尝试使用getString,然后尝试使用putString。所以初始get将返回默认值。
另外,您已经提到代码崩溃了。你介意粘贴崩溃日志吗?
答案 1 :(得分:0)
我在这里看到一个主要问题,它是以下一行:
i=i++;
这将不更改i
。你告诉它增加i,但同时在增加它之前将i设置为值。 i++;
就是你想要的。
此外,我建议您使用SharedPreferences.Editor.putStringSet()
代替putString()
- 这样您就不需要关心尺寸等等。
答案 2 :(得分:0)
在保存pref时尝试使用此代码段
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putString("KEY", "value");
edit.commit();
并获取它
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.getString("KEY", "defaultValue");