Ich habe eines ArrayList
von Objekten, die einen Namen und einen Symbolzeiger haben, und ich möchte es in speichern SharedPreferences
. Wie kann ich?
HINWEIS: Ich möchte die Datenbank nicht verwenden
Ich habe eines ArrayList
von Objekten, die einen Namen und einen Symbolzeiger haben, und ich möchte es in speichern SharedPreferences
. Wie kann ich?
HINWEIS: Ich möchte die Datenbank nicht verwenden
Also von der Android-Entwicklerseite auf Datenspeicher :
Nutzerpreferenzen
Gemeinsame Einstellungen dienen nicht ausschließlich zum Speichern von "Benutzereinstellungen", z. B. dem von einem Benutzer ausgewählten Klingelton. Wenn Sie Benutzereinstellungen für Ihre Anwendung erstellen möchten, lesen Sie PreferenceActivity. Dort finden Sie ein Aktivitätsframework, mit dem Sie Benutzereinstellungen erstellen können, die automatisch beibehalten werden (unter Verwendung gemeinsamer Einstellungen).
Ich denke, es ist in Ordnung, da einfach nur Schlüssel-Wert-Paare bestehen bleiben.
Für das Originalplakat ist das nicht so schwer. Sie durchlaufen einfach Ihre Array-Liste und fügen die Elemente hinzu. In diesem Beispiel verwende ich der Einfachheit halber eine Karte, aber Sie können eine Array-Liste verwenden und sie entsprechend ändern:
// my list of names, icon locations
Map<String, String> nameIcons = new HashMap<String, String>();
nameIcons.put("Noel", "/location/to/noel/icon.png");
nameIcons.put("Bob", "another/location/to/bob/icon.png");
nameIcons.put("another name", "last/location/icon.png");
SharedPreferences keyValues = getContext().getSharedPreferences("name_icons_list", Context.MODE_PRIVATE);
SharedPreferences.Editor keyValuesEditor = keyValues.edit();
for (String s : nameIcons.keySet()) {
// use the name as the key, and the icon as the value
keyValuesEditor.putString(s, nameIcons.get(s));
}
keyValuesEditor.commit()
Sie würden etwas Ähnliches tun, um die Schlüssel-Wert-Paare erneut zu lesen. Lassen Sie mich wissen, ob dies funktioniert.
Update: Wenn Sie API Level 11 oder höher verwenden, gibt es eine Methode zum Schreiben eines String-Sets
Überprüfen Sie unabhängig von der API-Ebene String-Arrays und Objekt-Arrays in SharedPreferences
ARRAY SPEICHERN
LADEN SIE ARRAY
quelle
Schreiben,
Lesen,
quelle
Gemeinsame Einstellungen haben a
getStringSet
undputStringSet
Methoden in API Level 11 eingeführt, dies ist jedoch nicht kompatibel mit älteren Android-Versionen (die immer noch beliebt sind) und ist auch auf Sätze von Zeichenfolgen beschränkt.Android bietet keine besseren Methoden, und das Durchlaufen von Karten und Arrays zum Speichern und Laden ist nicht sehr einfach und sauber, insbesondere für Arrays. Aber eine bessere Implementierung ist nicht so schwer:
Mit diesen fünf Methoden können Sie jetzt jede Sammlung in freigegebenen Einstellungen speichern. Arbeiten mit
JSONObject
undJSONArray
ist sehr einfach. Sie können mitJSONArray (Collection copyFrom)
öffentlichem Konstruktor ein , umJSONArray
aus jeder Java - Sammlung und VerwendungJSONArray
‚sget
Methoden , um die Elemente zuzugreifen.Es gibt keine Größenbeschränkung für freigegebene Einstellungen (außer den Speicherbeschränkungen des Geräts), sodass diese Methoden in den meisten Fällen funktionieren können, in denen Sie eine schnelle und einfache Speicherung für eine Sammlung in Ihrer App wünschen. Hier findet jedoch eine JSON-Analyse statt, und die Einstellungen in Android werden intern als XML-Dateien gespeichert. Daher empfehle ich die Verwendung anderer persistenter Datenspeichermechanismen, wenn Sie mit Megabyte an Daten arbeiten.
quelle
Einfacher Modus für die Speicherung komplexer Objekte mit der Gson Google Library [1]
[1] http://code.google.com/p/google-gson/
quelle
Ich habe eine Reihe von Taillengrößen (die bereits in meiner Datei array.xml erstellt wurden) mit dem folgenden Code in meine Datei settings.xml geladen. @ array / pant_inch_size ist die ID des gesamten Arrays.
Dadurch wurde das Menü mit Auswahlmöglichkeiten aus dem Array gefüllt. Ich habe die Standardgröße auf 34 festgelegt. Wenn das Menü angezeigt wird, wird Größe 34 vorausgewählt.
quelle
Die einfache Möglichkeit besteht darin, sie wie im folgenden Beispiel in einen JSON-String zu konvertieren:
Speichern Sie dann die Zeichenfolge in den freigegebenen Einstellungen. Sobald Sie es benötigen, rufen Sie einfach eine Zeichenfolge aus den freigegebenen Einstellungen ab und konvertieren Sie sie zurück in JSONArray oder JSONObject (gemäß Ihren Anforderungen).
quelle
Zum Schreiben:
Zum Lesen:
quelle
Dies ist der Code für gemeinsame Einstellungen, den ich erfolgreich verwende. Siehe diesen Link :
GLÜCKLICHE CODIERUNG!
quelle
Sie können putStringSet verwenden
Auf diese Weise können Sie ein HashSet wie folgt in Ihren Einstellungen speichern:
sparen
Wiederholen
Das putStringSet erlaubt nur ein Set und dies ist eine ungeordnete Liste.
quelle
Als ich damit abgehört wurde, bekam ich die Serialisierungslösung, mit der Sie Ihre Zeichenfolge serialisieren können. Aber ich habe mir auch einen Hack ausgedacht.
Lesen Sie dies nur, wenn Sie nichts über Serialisierung gelesen haben. Andernfalls lesen Sie meinen Hack
Um Array-Elemente in der richtigen Reihenfolge zu speichern, können wir das Array in eine einzelne Zeichenfolge serialisieren (indem wir eine neue Klasse ObjectSerializer erstellen (kopieren Sie den Code von - www.androiddevcourse.com/objectserializer.html, ersetzen Sie alles außer dem Paketnamen).
Eingabe von Daten in gemeinsame Einstellungen:
der Rest des Codes in Zeile 38 -
Setzen Sie das nächste Argument wie folgt ein, damit, wenn Daten nicht abgerufen werden, ein leeres Array zurückgegeben wird (wir können keine leere Zeichenfolge setzen, da der Container / die Variable ein Array ist, das keine Zeichenfolge ist).
Kommen zu meinem Hack: -
Führen Sie den Inhalt des Arrays zu einer einzelnen Zeichenfolge zusammen, indem Sie zwischen den einzelnen Elementen ein Symbol einfügen, und teilen Sie es dann beim Abrufen mit diesem Symbol auf. Das Hinzufügen und Abrufen von Zeichenfolgen ist mit gemeinsamen Einstellungen einfach. Wenn Sie sich Sorgen um das Teilen machen, schauen Sie einfach nach "Teilen eines Strings in Java".
[Hinweis: Dies funktioniert einwandfrei, wenn der Inhalt Ihres Arrays primitiver Art ist, z. B. Zeichenfolge, Int, Float usw. Es funktioniert für komplexe Arrays, die eine eigene Struktur haben, beispielsweise ein Telefonbuch, aber das Zusammenführen und Aufteilen wird zu einem etwas komplex. ]]
PS: Ich bin neu in Android, also weiß ich nicht, ob es ein guter Hack ist, also lass mich wissen, ob du bessere Hacks findest.
quelle