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.