Java >> Java tutorial >  >> Java

Sletning af et element (indeks) fra SharedPreferences

Jeg gemmer et array kaldet semesterArray som er en List<String> semesterArray = new ArrayList<>() med følgende metode på 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-erklæringen er der for at opdatere SharedPreferences , Jeg fik ideen fra dette StackOverflow-svar. Nu sørger følgende metode for at indlæse SharedPreferences der lige blev gemt:

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));
    }
}

Vi fjerner duplikerede semestre, fordi if-erklæringen i saveSemesterArray metode duplikerer de allerede gemte semestre til den opdaterede SharedPreferences . Nu vil jeg oprette en metode, der sletter et element (indeks) fra SharedPreferences . For eksempel, hvis jeg har Forår 2020 , Sommeren 2020 og Efterår 2020 , ville jeg være i stand til at slette ethvert indeks på den liste og gemme det igen, så listen er opdateret. Er der en måde dette kan gøres ved at bruge SharedPreferences ? Hvis ikke, hvad skal jeg bruge i stedet? Jeg sætter pris på al hjælp.

Svar

Først skal du huske, at du ikke gemmer en liste i SharedPreferences , gemmer du en streng, der serliserer dataene i et format, der er let at deserlize.

For det andet, gemme en streng i SharedPreferences er en meget hurtig opgave, du behøver ikke rigtig at lave en if tjek for at sikre, at de ikke er helt ens.

For det tredje ville den eneste måde at slette et element fra den serliserede liste være:

1- Deserlizing af den gemte liste.

2- Fjernelse af emnet i indekset.

3- Fornyelse af listen og gemme den igen.


Java tag