【问题标题】:How to store array in an sharedpreferences in android如何将数组存储在android中的sharedpreferences中
【发布时间】:2014-11-18 09:22:55
【问题描述】:

我正在构建一个 android 应用程序,用户从微调器工具中选择他的事件。

微调器工具显示用户在应用程序首次启动时选择的数组列表。

现在我已经将数组列表从应用启动页面解析为微调器活动类,并在微调器工具中成功使用它。

代码如下:

public static ArrayList<String> array;

这里,名称数组有arraylist。 我需要将其存储在 sharedprefrences 中。我该怎么做?

我是安卓新手。

【问题讨论】:

标签: java android arrays sharedpreferences


【解决方案1】:

我不建议使用putStringSet(),因为它会搞砸你的数组顺序。

我建议在你的数组上运行一个 for 循环并给它们不同的键名。 + 最后添加另一个字符串,它告诉你一旦你想读出 SharedPreferences 的字符串,数组有多长。

常规设置:

SharedPreferences sharedPreferences = getSharedPreferences("YOURKEYFILE", Activity.MODE_PRIVATE);
SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit();

保存字符串数组:

for (int i = 0; i < array.size(); i++) {
    sharedPreferencesEditor.putString("StringArrayElement" +i, array.get(i));
}
sharedPreferencesEditor.putInt("StringArrayLength", array.size());
sharedPreferencesEditor.commit();

读取字符串数组:

array.clear();
for (int i = 0; i < sharedPreferencesEditor.getInt("StringArrayLength", 0) {
    array.add(sharedPreferencesEditor.getString("StringArrayElement" +i, "");
}

注意: 以上代码未经测试!如果您发现错误,请社区纠正我。

【讨论】:

  • @Sonam 你试过我的解决方案了吗?你了解我的解决方案吗?
【解决方案2】:

您可以将数组保存为可序列化对象。

//save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
    editor.putString(ARRAY, ObjectSerializer.serialize(array));
} catch (IOException e) {
    e.printStackTrace();
}
editor.commit();

并从 SharedPreferences 中检索它:

SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);

try {
    array = (ArrayList<String>) ObjectSerializer.deserialize(prefs.getString(ARRAY,
         ObjectSerializer.serialize(new ArrayList<String>())));
} catch (IOException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

你可以从here获取ObjectSerializer.java

【讨论】:

  • 在 ObjectSerializer 中。 WrappedIOException 中的 java 类错误 -WrappedIOException 无法解决。请帮助我
  • 你导入了吗??
  • @Sonam 对于其他解决方案,您可以将 arraylist 转换为 String 数组并将该数组保存到 SP 并轻松检索它。!!
  • @PiyushGupta 我用过它,但是当我烘烤保存在 SharedPreferences 中的值时,其中有空烘烤。
  • 我得到了同样的错误@PiyushGupta 在这里提到使用自定义对象在这种情况下我该如何克服?
【解决方案3】:

此代码可能对您有所帮助。您通过计数器 i 保存列表项。

for(int i=0;i<list.size();i++)
    {
editor.putString(list.get(i)+i, list.get(i));
editor.commit();}
for(int i=0;i<list.size();i++)
    {
preferences.getString(list.get(i)+i, "");
    }

【讨论】:

    【解决方案4】:

    最好使用 Set&lt;String&gt;,因为 API 版本 11 引入了方法 putStringSet 和 getStringSet,它们允许开发人员存储字符串值列表并检索字符串值列表,分别。

    保存列表

    // Save the list.
    editor.putStringSet("array", myStrings);
    editor.commit();
    

    获取列表

    // Get the current list.
    SharedPreferences settings = this.getSharedPreferences("YourActivityPreferences", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit();
    Set<String> myStrings = settings.getStringSet("array", new HashSet<String>());
    

    【讨论】:

    • 这里在 putString 上显示错误 - SharedPreferences.Editor 类型中的 putStringSet(String, Set) 方法不适用于参数(String, ArrayList)。请帮忙解决
    • 你需要使用Set&lt;String&gt;而不是ArrayList&lt;String&gt;
    • 但是我将值从 firstactivity 解析到 other 所以我使用 ArrayList 所以请告诉我改变方法来做到这一点
    • 我可以将 ArrayList 的值存储到 Set 在同一个活动中
    • 是的,你可以。 ..请查看 android 开发者网站以使用 set 或参考 java 教程
    猜你喜欢
    • 2012-05-06
    • 2012-02-01
    • 2012-09-03
    • 2011-11-02
    • 1970-01-01
    • 2015-02-26
    • 2017-03-03
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多