从 SharedPreferences 中删除项目(索引)
Deleting an item (index) from SharedPreferences
我正在保存一个名为 semesterArray
的数组,它是一个 List<String> semesterArray = new ArrayList<>()
,在 SharedPreferences
上使用以下方法:
public void saveSemesterArray() {
StringBuilder stringBuilder = new StringBuilder();
for(String str: semesterArray) {
stringBuilder.append(str);
stringBuilder.append(",");
}
SharedPreferences currentSharedPreferences = getSharedPreferences("CURRENT", MODE_PRIVATE);
SharedPreferences.Editor editor = currentSharedPreferences.edit();
editor.putString("currentSemesterArray", stringBuilder.toString());
if(!currentSharedPreferences.getString("currentSemesterArray", "").equals(
currentSharedPreferences.getString("updatedSemesterArray", ""))) {
editor.putString("updatedSemesterArray", currentSharedPreferences.getString(
"currentSemesterArray", "") + stringBuilder.toString());
editor.apply();
}
editor.apply();
}
if 语句 用于更新 SharedPreferences
,我的想法来自 。现在,以下方法负责加载刚刚保存的 SharedPreferences
:
public void loadSemesterArray() {
SharedPreferences sharedPreferences = getSharedPreferences("CURRENT", MODE_PRIVATE);
String semestersString = sharedPreferences.getString("updatedSemesterArray", "");
String[] itemsSemesters = semestersString.split(",");
List<String> items = new ArrayList<String>();
noDuplicates = new ArrayList<String>();
for(int i = 0; i < itemsSemesters.length; i++) {
items.add(itemsSemesters[i]);
}
// Removing duplicates from Semesters list
for(String str: items) {
if(!noDuplicates.contains(str)) {
noDuplicates.add(str);
}
}
for(int i = 0; i < noDuplicates.size(); i++) {
Log.d("NoDuplicatesList", noDuplicates.get(i));
}
}
我们删除了重复的学期,因为 saveSemesterArray
方法中的 if 语句 将已保存的学期复制到更新的 SharedPreferences
中。现在,我想创建一个从 SharedPreferences
中删除项目(索引)的方法。例如,如果我有 Spring 2020、2020 夏季和2020 秋季,我将能够删除该列表中的任何索引并再次保存它以便更新列表。有没有一种方法可以使用 SharedPreferences
来完成?如果不是,我应该使用什么?感谢您的帮助。
您可以使用 Set 来存储您的列表。将您的字符串数组转换为 Set,然后将该集合保存到
sharedPreferences.edit().putStringSet(key, value).apply();
然后查询您的偏好并将其转换为列表,然后您可以按索引删除任何内容。
首先,您需要记住,您不是将列表保存到 SharedPreferences
,而是保存一个字符串,该字符串以易于反序列化的格式对数据进行序列化。
其次,将字符串保存到 SharedPreferences
中是一项非常快速的任务,您实际上不需要进行 if
检查以确保它们不完全相同。
第三,从该序列化列表中删除项目的唯一方法是:
1- 反序列化保存的列表。
2- 删除索引处的项目。
3- 重新序列化列表并再次保存。
我正在保存一个名为 semesterArray
的数组,它是一个 List<String> semesterArray = new ArrayList<>()
,在 SharedPreferences
上使用以下方法:
public void saveSemesterArray() {
StringBuilder stringBuilder = new StringBuilder();
for(String str: semesterArray) {
stringBuilder.append(str);
stringBuilder.append(",");
}
SharedPreferences currentSharedPreferences = getSharedPreferences("CURRENT", MODE_PRIVATE);
SharedPreferences.Editor editor = currentSharedPreferences.edit();
editor.putString("currentSemesterArray", stringBuilder.toString());
if(!currentSharedPreferences.getString("currentSemesterArray", "").equals(
currentSharedPreferences.getString("updatedSemesterArray", ""))) {
editor.putString("updatedSemesterArray", currentSharedPreferences.getString(
"currentSemesterArray", "") + stringBuilder.toString());
editor.apply();
}
editor.apply();
}
if 语句 用于更新 SharedPreferences
,我的想法来自 SharedPreferences
:
public void loadSemesterArray() {
SharedPreferences sharedPreferences = getSharedPreferences("CURRENT", MODE_PRIVATE);
String semestersString = sharedPreferences.getString("updatedSemesterArray", "");
String[] itemsSemesters = semestersString.split(",");
List<String> items = new ArrayList<String>();
noDuplicates = new ArrayList<String>();
for(int i = 0; i < itemsSemesters.length; i++) {
items.add(itemsSemesters[i]);
}
// Removing duplicates from Semesters list
for(String str: items) {
if(!noDuplicates.contains(str)) {
noDuplicates.add(str);
}
}
for(int i = 0; i < noDuplicates.size(); i++) {
Log.d("NoDuplicatesList", noDuplicates.get(i));
}
}
我们删除了重复的学期,因为 saveSemesterArray
方法中的 if 语句 将已保存的学期复制到更新的 SharedPreferences
中。现在,我想创建一个从 SharedPreferences
中删除项目(索引)的方法。例如,如果我有 Spring 2020、2020 夏季和2020 秋季,我将能够删除该列表中的任何索引并再次保存它以便更新列表。有没有一种方法可以使用 SharedPreferences
来完成?如果不是,我应该使用什么?感谢您的帮助。
您可以使用 Set 来存储您的列表。将您的字符串数组转换为 Set,然后将该集合保存到
sharedPreferences.edit().putStringSet(key, value).apply();
然后查询您的偏好并将其转换为列表,然后您可以按索引删除任何内容。
首先,您需要记住,您不是将列表保存到 SharedPreferences
,而是保存一个字符串,该字符串以易于反序列化的格式对数据进行序列化。
其次,将字符串保存到 SharedPreferences
中是一项非常快速的任务,您实际上不需要进行 if
检查以确保它们不完全相同。
第三,从该序列化列表中删除项目的唯一方法是:
1- 反序列化保存的列表。
2- 删除索引处的项目。
3- 重新序列化列表并再次保存。