首页 > 解决方案 > 从 SharedPreferences 中删除项目(索引)

问题描述

我正在使用以下方法保存一个名为semesterArrayList<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 2020Summer 2020Fall 2020,我可以删除该列表中的任何索引并再次保存,以便更新列表。有没有办法可以做到这一点SharedPreferences?如果不是,我应该改用什么?我很感激任何帮助。

标签: javaandroidarraylistsharedpreferences

解决方案


首先,您需要记住您不是将列表保存到 中SharedPreferences,而是保存一个字符串,该字符串以易于反序列化的格式对数据进行序列化。

其次,将字符串保存到其中SharedPreferences是一项非常快速的任务,您实际上不需要if检查以确保它们不完全相同。

第三,从该序列化列表中删除项目的唯一方法是:

1- 对保存的列表进行反序列化。

2-删除索引处的项目。

3-重新排列列表并再次保存。


推荐阅读