我想将用户输入的最后X值存储到表单中。我有一个包含20个值的列表,每次用户输入一个新值时,最旧的值将被推出列表并且最新的值将进入。我希望此列表在应用程序启动之间保持不变,但共享偏好不支持有序集,所以结果每次都会混乱。如何将列表存储在我可以检索的有序表单中?
baseurl: ""
url: "bousis.github.io"
permalink: /:title
答案 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();