java - 从 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
我从这个 StackOverflow 答案中得到了这个想法。现在,以下方法负责加载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));
}
}
我们删除重复的学期,因为方法中的if 语句saveSemesterArray
将已经保存的学期复制到更新的SharedPreferences
. 现在,我想创建一个从SharedPreferences
. 例如,如果我有Spring 2020、Summer 2020和Fall 2020,我可以删除该列表中的任何索引并再次保存,以便更新列表。有没有办法可以做到这一点SharedPreferences
?如果不是,我应该改用什么?我很感激任何帮助。
解决方案
首先,您需要记住您不是将列表保存到 中SharedPreferences
,而是保存一个字符串,该字符串以易于反序列化的格式对数据进行序列化。
其次,将字符串保存到其中SharedPreferences
是一项非常快速的任务,您实际上不需要if
检查以确保它们不完全相同。
第三,从该序列化列表中删除项目的唯一方法是:
1- 对保存的列表进行反序列化。
2-删除索引处的项目。
3-重新排列列表并再次保存。
推荐阅读
- java - 如何将列表分配给列表
- oracle - 存储正在运行的 oracle 脚本的路径/文件名
- e2e-testing - 赛普拉斯 e2e 测试 - 如何解决跨域错误?
- python - Python matplotlib:如何让矩阵图具有可变的列宽
- javascript - 如何将 XML 值读入 Javascript 或 jQuery
- javascript - 反应追加到数组
- linkedin - 通过 LinkedIn API 检索原生视频
- python - 由于未加载模型,无法创建表单字段
- c# - 如何在 Moq 中设置它以给我 null 或对象?
- java - 如何在 Java 中获取网络驱动器文件系统对象