Android:在应用启动之间存储有序的值列表

时间:2015-08-04 10:52:01

标签: java android set sharedpreferences

我想将用户输入的最后X值存储到表单中。我有一个包含20个值的列表,每次用户输入一个新值时,最旧的值将被推出列表并且最新的值将进入。我希望此列表在应用程序启动之间保持不变,但共享偏好不支持有序集,所以结果每次都会混乱。如何将列表存储在我可以检索的有序表单中?

baseurl: ""
url: "bousis.github.io"
permalink: /:title

2 个答案:

答案 0 :(得分: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'
 }

当然,这个片段应该给你一般的想法,你可能只会每次添加最后一个,而不是一次添加。阅读时,首先读取索引值,然后只读取index个字符串数。

答案 1 :(得分:0)

使用SharedPreferences很简单,在API 11之后,SharedPreferences编辑接受Set作为参数,因此只需创建一个大小为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