2012-09-05 21 views
9

Ich wollte eine Arraylist zu SharedPreferences speichern, so dass ich es in einen String drehen müssen und zurück, das ist, was ich tue:Java konvertiert ArrayList in String und zurück in ArrayList?

// Save to shared preferences 
SharedPreferences sharedPref = this.getPreferences(Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = this.getPreferences(Activity.MODE_PRIVATE).edit(); 
editor.putString("myAppsArr", myAppsArr.toString()); 
editor.commit(); 

ich es mit String arrayString = sharedPref.getString("yourKey", null); aber ich weiß nicht, wie abrufen können wandle arrayString zurück in eine ArrayList. Wie kann es gemacht werden?


Mein Array sieht ungefähr so ​​aus:

[item1,item2,item3] 

Antwort

26

Sie haben zwei Möglichkeiten:

  1. manuell die Zeichenfolge analysieren und die Arraylist erstellen. Das wäre ziemlich langweilig.
  2. Verwenden Sie eine JSON-Bibliothek wie Googles Gson-Bibliothek zum Speichern und Abrufen von Objekten als JSON-Zeichenfolgen. Dies ist eine leichte Bibliothek, gut angesehen und beliebt. Es wäre eine ideale Lösung in Ihrem Fall mit minimalen Arbeitsaufwand. z.B.

    // How to store JSON string 
    Gson gson = new Gson(); 
    // This can be any object. Does not have to be an arraylist. 
    String json = gson.toJson(myAppsArr); 
    
    // How to retrieve your Java object back from the string 
    Gson gson = new Gson(); 
    DataObject obj = gson.fromJson(arrayString, ArrayList.class); 
    
+0

Ich habe die Array-Elemente in Strings geändert, ich bin mir sicher, dass es jetzt viel einfacher sein muss. – lisovaccaro

+0

Es spielt keine Rolle. Mit Gson können Sie jedes Java-Objekt in eine Zeichenfolge konvertieren und dann zurück konvertieren. Selbst wenn Sie eine Arraylist mit benutzerdefinierten Objekten haben, gibt es kein Problem. –

2

Versuchen Sie, diese

ArrayList<String> array = Arrays.asList(arrayString.split(",")) 

Das funktioniert, wenn das Komma als Trennzeichen verwendet wird und keines der Elemente haben es.

1

ich landete mit:

ArrayList<String> appList = new ArrayList<String>(Arrays.asList(appsString.split("\\s*,\\s*"))); 

Dies obwohl für alle Array-Typen nicht funktioniert. Diese Option unterscheidet sich von:

ArrayList<String> array = Arrays.asList(arrayString.split(",")); 

dass die zweite Option ein unveränderbares Array erstellt.

+0

Hast du meine Antwort gesehen? –