376 Stimmen

ArrayList in SharedPreferences speichern

Ich habe eine ArrayList mit benutzerdefinierten Objekten. Jedes benutzerdefinierte Objekt enthält eine Vielzahl von Zeichenfolgen und Zahlen. Ich benötige das Array auch dann, wenn der Benutzer die Aktivität verlässt und zu einem späteren Zeitpunkt zurückkehren möchte, aber ich brauche das Array nicht, wenn die Anwendung vollständig geschlossen wurde. Ich speichere eine Menge anderer Objekte auf diese Weise, indem ich die SharedPreferences aber ich kann nicht herausfinden, wie ich mein gesamtes Array auf diese Weise speichern kann. Ist das möglich? Vielleicht SharedPreferences ist nicht der richtige Weg, dies zu tun? Gibt es eine einfachere Methode?

23voto

sachin pangare Punkte 1497

Hallo Freunde, ich habe die Lösung des obigen Problems ohne Verwendung von Gson Bibliothek. Hier stelle ich den Quellcode ein.

1. die Erklärung der Variablen, d.h.

  SharedPreferences shared;
  ArrayList<String> arrPackage;

2. die Initialisierung der Variablen, d.h.

 shared = getSharedPreferences("App_settings", MODE_PRIVATE);
 // add values for your ArrayList any where...
 arrPackage = new ArrayList<>();

3. speichern Sie den Wert in sharedPreference mit packagesharedPreferences() :

 private void packagesharedPreferences() {
   SharedPreferences.Editor editor = shared.edit();
   Set<String> set = new HashSet<String>();
   set.addAll(arrPackage);
   editor.putStringSet("DATE_LIST", set);
   editor.apply();
   Log.d("storesharedPreferences",""+set);
 }

4. den Wert von sharedPreference abrufen mit retriveSharedValue() :

 private void retriveSharedValue() {
   Set<String> set = shared.getStringSet("DATE_LIST", null);
   arrPackage.addAll(set);
   Log.d("retrivesharedPreferences",""+set);
 }

Ich hoffe, es ist hilfreich für Sie...

15voto

Avi Levin Punkte 1838

Mit Android SharedPreferances können Sie primitive Typen (Boolean, Float, Int, Long, String und StringSet, die seit API11 verfügbar sind) im Speicher als xml-Datei speichern.

Der Kerngedanke einer jeden Lösung wäre die Konvertierung der Daten in einen dieser primitiven Typen.

Ich persönlich konvertiere meine Liste gerne in das Json-Format und speichere sie dann als String in einem SharedPreferences-Wert.

Um meine Lösung nutzen zu können, müssen Sie Google Gson lib.

Fügen Sie in gradle einfach die folgende Abhängigkeit hinzu (bitte verwenden Sie die neueste Version von Google):

compile 'com.google.code.gson:gson:2.6.2'

Daten speichern (wobei HttpParam Ihr Objekt ist):

List<HttpParam> httpParamList = "**get your list**"
String httpParamJSONList = new Gson().toJson(httpParamList);

SharedPreferences prefs = getSharedPreferences(**"your_prefes_key"**, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(**"your_prefes_key"**, httpParamJSONList);

editor.apply();

Retrieve Data (wobei HttpParam Ihr Objekt ist):

SharedPreferences prefs = getSharedPreferences(**"your_prefes_key"**, Context.MODE_PRIVATE);
String httpParamJSONList = prefs.getString(**"your_prefes_key"**, ""); 

List<HttpParam> httpParamList =  
new Gson().fromJson(httpParamJSONList, new TypeToken<List<HttpParam>>() {
            }.getType());

12voto

Krishna Vyas Punkte 1000

Das ist die perfekte Lösung probieren Sie es aus,

public void saveArrayList(ArrayList<String> list, String key){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString(key, json);
    editor.apply();     // This line is IMPORTANT !!!
}

public ArrayList<String> getArrayList(String key){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    Gson gson = new Gson();
    String json = prefs.getString(key, null);
    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    return gson.fromJson(json, type);
}

10voto

SKT Punkte 1781

Sie können die Arrayliste auch in einen String umwandeln und diesen in der Präferenz

private String convertToString(ArrayList<String> list) {

            StringBuilder sb = new StringBuilder();
            String delim = "";
            for (String s : list)
            {
                sb.append(delim);
                sb.append(s);;
                delim = ",";
            }
            return sb.toString();
        }

private ArrayList<String> convertToArray(String string) {

            ArrayList<String> list = new ArrayList<String>(Arrays.asList(string.split(",")));
            return list;
        }

Sie können die Arrayliste nach der Konvertierung in eine Zeichenkette speichern, indem Sie convertToString Methode und rufen die Zeichenkette ab und konvertieren sie in ein Array mit convertToArray

Nach API 11 können Sie die Einstellungen direkt unter SharedPreferences Allerdings !!! :)

9voto

Andrey Tuzov Punkte 111

Auch mit Kotlin:

fun SharedPreferences.Editor.putIntegerArrayList(key: String, list: ArrayList<Int>?): SharedPreferences.Editor {
    putString(key, list?.joinToString(",") ?: "")
    return this
}

fun SharedPreferences.getIntegerArrayList(key: String, defValue: ArrayList<Int>?): ArrayList<Int>? {
    val value = getString(key, null)
    if (value.isNullOrBlank())
        return defValue
    return ArrayList (value.split(",").map { it.toInt() }) 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X