【问题标题】:Android: store an ordered list of values between app launchesAndroid:在应用启动之间存储有序的值列表
【发布时间】:2015-08-04 10:52:00
【问题描述】:

我想将用户输入的最后 X 个值存储到表单中。我有一个包含 20 个值的列表,每次用户输入一个新值时,最旧的值都会从列表中推出,而最新的值会进入。我希望这个列表在应用程序启动之间保持不变,但 sharedpreferences 不支持有序集,因此每次结果都会变得混乱。如何以有序的形式存储列表,然后可以检索?

Set<String> previousValues = sharedPreferences.getStringSet(getString(R.string.LAST_VALUES), null);

【问题讨论】:

  • 您可以将它们转换为一个字符串,例如使用 json。然后将其从 json 解析回字符串。如果您需要在两次启动之间保存更多数据,您也可以使用 SQLite。

标签: java android set sharedpreferences


【解决方案1】:

您可以通过多种方式做到这一点:

  • 创建一个 SQLite 数据库并将它们存储在一个表中

  • 在共享首选项中有一个唯一键,并使用 JSON 对其进行序列化。不需要使用任何外部库,Android自带JSON classes

  • 在 SharedPreference 中有多个键,一个用于每个值,一个附加的数字键用于存储最后一个的索引,例如:

 int index = ... // number of entries
 List<String> values = ... // the values you want to store
 SharedPreferences prefs = ...
 SharedPreferences.Editor editor = prefs.edit();
 editor.putInt("index", index);
 for (int i = 0 ; i < index ; i++) {
    editor.putString("value." + i, values.get(i)); // assuming your values are in a String collection called 'values'
 }

当然,这个 sn-p 应该给你一个大致的想法,你可能每次只添加最后一个,而不是一次全部添加。读取时,先读取索引值,再读取index字符串数。

【讨论】:

    【解决方案2】:

    使用SharedPreferences 很容易,在API 11 之后SharedPreferences 编辑器接受Sets 作为参数,因此只需创建一个大小为20 的Set 并将其存储在共享首选项中。检索时像任何其他 java 设置一样使用它以仅存储 20 个值。

    Set<String> lastValues = new HashSet<String>(20);
    

    获取共享首选项

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

    设置共享首选项

    Editor editor = prefs.edit();
    try {
        editor.putString(TASKS, ObjectSerializer.serialize(lastValues));
    } catch (IOException e) {
        e.printStackTrace();
    }
    editor.commit();
    

    示例herehere

    【讨论】:

    • A Set 不能保证保持顺序,并且问题表明应该对列表进行排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2014-05-06
    相关资源
    最近更新 更多