0

我试图通过在用户按下按钮时将字符串添加到编辑器来优先保存字符串。然后我试图从首选项中检索字符串并将其转换为arrayList。

在 onCreate

 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();

它说应用程序后面的首选项未使用,我认为这很奇怪,因为我认为它告诉它 putString。应用程序到达那里时崩溃。为什么我稍后在应用程序中的首选项会被使用?

4

3 回答 3

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");
于 2013-10-24T04:05:55.613 回答
0

我在这里看到一个主要问题,它是以下行:

i=i++;

这一点都不会改变i。你告诉它增加 i 但同时将 i 设置为在增加它之前的值。i++;是你想要的。

另外我建议使用SharedPreferences.Editor.putStringSet()而不是putString()- 这样你就不需要关心大小等等。

于 2013-10-24T02:43:19.243 回答
0

你想getString还是putString在这里

for (int i = 0; i < size; i++) {
         ((SharedPreferences) editor).getString("list_"+i, updatableList.get(i));
     } 

因为这之前的代码,做了一个putInt。

SharedPreference 像键值对一样工作。如果未找到该键,则返回默认值。

从上面的代码中,您首先尝试 getString,然后尝试 putString。所以初始获取将返回默认值。

此外,您提到代码崩溃。你介意粘贴崩溃日志吗?

于 2013-10-24T01:02:51.990 回答