Ich habe eine ArrayList
mit benutzerdefinierten Objekten. Jedes benutzerdefinierte Objekt enthält eine Vielzahl von Zeichenfolgen und Zahlen. Ich brauche das Array, um zu bleiben, auch wenn der Benutzer die Aktivität verlässt und dann zu einem späteren Zeitpunkt zurückkehren möchte. Ich benötige das Array jedoch nicht, nachdem die Anwendung vollständig geschlossen wurde. Ich speichere viele andere Objekte auf diese Weise, indem SharedPreferences
ich das verwende, aber ich kann nicht herausfinden, wie ich mein gesamtes Array auf diese Weise speichern kann. Ist das möglich? Vielleicht SharedPreferences
ist das nicht der richtige Weg? Gibt es eine einfachere Methode?
android
arraylist
sharedpreferences
ryandlf
quelle
quelle
Antworten:
Nach API 11 wird
SharedPreferences Editor
akzeptiertSets
. Sie können Ihre Liste in eineHashSet
oder etwas Ähnliches konvertieren und so speichern. Wenn Sie es zurückgelesen haben, konvertieren Sie es in einArrayList
, sortieren Sie es bei Bedarf und Sie können loslegen.Sie können Ihre auch serialisieren
ArrayList
und dann in / von speichern / lesenSharedPreferences
. Unten ist die Lösung:BEARBEITEN:
Ok, unten ist die Lösung, um sie
ArrayList
als serialisiertes Objekt zu speichernSharedPreferences
und dann aus SharedPreferences zu lesen.Da die API nur das Speichern und Abrufen von Zeichenfolgen in / aus SharedPreferences unterstützt (nach API 11 ist dies einfacher), müssen wir das ArrayList-Objekt mit der Liste der Aufgaben in Zeichenfolgen serialisieren und de-serialisieren.
In der
addTask()
Methode der TaskManagerApplication-Klasse müssen wir die Instanz der gemeinsam genutzten Voreinstellung abrufen und dann die serialisierte ArrayList mit der folgendenputString()
Methode speichern :Ebenso müssen wir die Liste der Aufgaben aus der Voreinstellung in der
onCreate()
Methode abrufen :Sie können die
ObjectSerializer
Klasse aus dem Apache Pig-Projekt ObjectSerializer.java abrufenquelle
putStringSet
bei API 11 hinzugefügt wurde. Die meisten aktuellen Programmierer zielen auf Lease-API 8 (Froyo) ab.scoreEditor
?Mit diesem Objekt -> TinyDB - Android-Shared-Preferences-Turbo ist es sehr einfach.
stellen
bekommen
AKTUALISIEREN
Einige nützliche Beispiele und Fehlerbehebungen finden Sie hier: Android Shared Preference TinyDB putListObject-Funktion
quelle
tinydb.putList()
Schauen Sie sich die Beispiele auf der verlinkten Seite an.Speichern
Array
inSharedPreferences
:Laden von
Array
Daten ausSharedPreferences
quelle
ArrayList
inSharedPrefeneces
Sie könnten verwenden ,mEdit1.clear()
dies zu vermeiden.Sie können es in konvertieren
JSON String
und die Zeichenfolge in der speichernSharedPreferences
.quelle
Wie @nirav sagte, ist die beste Lösung, es in sharedPrefernces als JSON-Text unter Verwendung der Gson-Dienstprogrammklasse zu speichern. Unten Beispielcode:
quelle
Hey Freunde, ich habe die Lösung des obigen Problems ohne Verwendung bekommen
Gson
Bibliothek . Hier poste ich Quellcode.1.Variable Erklärung dh
2.Variable Initialisierung dh
3.Speichern Sie den Wert in sharedPreference mit
packagesharedPreferences()
:4.Wiederholen Sie den Wert von sharedPreference mit
retriveSharedValue()
:Ich hoffe es wird hilfreich für dich ...
quelle
String
s?JAVA:
Kotlin
quelle
Mit Android SharedPreferances können Sie primitive Typen (Boolean, Float, Int, Long, String und StringSet, die seit API11 verfügbar sind) als XML-Datei im Speicher speichern.
Die Schlüsselidee jeder Lösung wäre, die Daten in einen dieser primitiven Typen zu konvertieren.
Ich persönlich liebe es, meine Liste in das JSON-Format zu konvertieren und sie dann als Zeichenfolge in einem SharedPreferences-Wert zu speichern.
Um meine Lösung verwenden zu können, müssen Sie Google Gson hinzufügen lib .
Fügen Sie in gradle einfach die folgende Abhängigkeit hinzu (verwenden Sie bitte die neueste Version von Google):
Daten speichern (wobei HttpParam Ihr Objekt ist):
Daten abrufen (wobei HttpParam Ihr Objekt ist):
quelle
Dies ist Ihre perfekte Lösung. Probieren Sie es aus,
quelle
Sie können die Arrayliste auch in einen String konvertieren und diesen vorzugsweise speichern
Sie können die Arrayliste speichern, nachdem Sie sie mit der
convertToString
Methode in einen String konvertiert haben. Sie können den String abrufen und mit in ein Array konvertierenconvertToArray
Nach API 11 können Sie den Satz jedoch direkt in SharedPreferences speichern !!! :) :)
quelle
Für String, int, boolean ist sharedPreferences die beste Wahl.
Wenn Sie ArrayList oder komplexe Daten speichern möchten. Die beste Wahl wäre die Papierbibliothek.
Abhängigkeit hinzufügen
Papier initialisieren
Sollte einmal in Application.onCreate () initialisiert werden:
speichern
Lade Daten
Verwenden Sie Standardwerte, wenn das Objekt nicht im Speicher vorhanden ist.
Bitte schön.
https://github.com/pilgr/Paper
quelle
Ich habe alle Antworten oben gelesen. Das ist alles richtig, aber ich habe eine einfachere Lösung gefunden:
Speichern der Zeichenfolgenliste in den gemeinsam genutzten Einstellungen >>
}}
und zum Abrufen der String-Liste von Shared-Preference >>
Hier
Constants.APP_PREFS
ist der Name der zu öffnenden Datei. darf keine Pfadtrennzeichen enthalten.quelle
Auch bei Kotlin:
quelle
Am besten konvertieren Sie mit GSON in eine JSOn-Zeichenfolge und speichern diese Zeichenfolge in SharedPreference. Ich benutze diese Methode auch, um Antworten zwischenzuspeichern.
quelle
Sie können String- und benutzerdefinierte Array-Listen mithilfe der Gson-Bibliothek speichern.
=> Zuerst müssen Sie eine Funktion erstellen, um die Array-Liste in SharedPreferences zu speichern.
=> Sie müssen eine Funktion erstellen, um eine Array-Liste von SharedPreferences abzurufen.
=> So rufen Sie die Funktion zum Speichern und Abrufen von Array-Listen auf.
=> Vergessen Sie nicht, die gson-Bibliothek in build.gradle auf App-Ebene hinzuzufügen.
Implementierung 'com.google.code.gson: gson: 2.8.2'
quelle
Sie können auf die Funktionen serializeKey () und deserializeKey () aus der SharedPreferencesTokenCache-Klasse von FacebookSDK verweisen. Es konvertiert den unterstützten Typ in das JSON-Objekt und speichert die JSON-Zeichenfolge in SharedPreferences . Sie können das SDK hier herunterladen
quelle
Warum steckst du deine Arrayliste nicht in eine Anwendungsklasse? Es wird nur zerstört, wenn die App wirklich getötet wird. Es bleibt also so lange bestehen, wie die App verfügbar ist.
quelle
Der beste Weg, den ich finden konnte, ist, ein 2D-Array von Schlüsseln zu erstellen und die benutzerdefinierten Elemente des Arrays in das 2-D-Array von Schlüsseln einzufügen und sie dann beim Start über das 2D-Arra abzurufen. Die Idee, ein String-Set zu verwenden, gefiel mir nicht, da die meisten Android-Benutzer immer noch Lebkuchen verwenden und für das Verwenden eines String-Sets Waben erforderlich sind.
Beispielcode: Hier ist Ditor der gemeinsam genutzte Pref-Editor und Rowitem ist mein benutzerdefiniertes Objekt.
quelle
Der folgende Code ist die akzeptierte Antwort, mit ein paar weiteren Zeilen für neue Leute (mich), z. zeigt, wie das Objekt vom Typ set wieder in arrayList konvertiert wird, und zusätzliche Anleitungen zu den Vorgängen '.putStringSet' und '.getStringSet'. (Danke, Böse)
quelle
quelle
Vergessen Sie nicht, Serializable zu implementieren:
https://stackoverflow.com/a/7635154/4639974
quelle
Sie können die Serialisierung oder die Gson-Bibliothek verwenden, um die Liste in einen String umzuwandeln und umgekehrt, und dann den String in den Einstellungen speichern.
Verwenden der Gson-Bibliothek von Google:
Verwenden der Java-Serialisierung:
quelle
Diese Methode wird zum Speichern / Speichern der Array-Liste verwendet: -
Diese Methode wird verwendet, um die Array-Liste abzurufen: -
quelle
Sie können es in ein
Map
Objekt konvertieren, um es zu speichern, und dann die Werte wieder in eine ArrayList ändern, wenn Sie das abrufenSharedPreferences
.quelle
Verwenden Sie diese benutzerdefinierte Klasse:
Wie benutzt man:
quelle
das sollte funktionieren:
sie, um es nur zu fangen:
Für mich geht das.
quelle
Meine Utensilienklasse zum Speichern der Liste an
SharedPreferences
Verwenden von
.
Vollständiger Code meiner Utils // Überprüfen Sie anhand eines Beispiels im Aktivitätscode
quelle
Ich habe die gleiche Methode zum Speichern und Abrufen eines Strings verwendet, aber hier mit arrayList habe ich HashSet als Vermittler verwendet
Um arrayList in SharedPreferences zu speichern, verwenden wir HashSet:
1- Wir erstellen die Variable SharedPreferences (an der Stelle, an der die Änderung am Array erfolgt).
2 - Wir konvertieren die ArrayList in HashSet
3 - dann setzen wir das stringSet und wenden es an
4 - Sie erhalten getStringSet in HashSet und erstellen ArrayList neu, um das HashSet festzulegen.
quelle
quelle
Alle obigen Antworten sind richtig. :) Ich selbst habe eines davon für meine Situation verwendet. Als ich jedoch die Frage las, stellte ich fest, dass das OP tatsächlich über ein anderes Szenario als den Titel dieses Beitrags spricht, wenn ich es nicht falsch verstanden habe.
"Ich brauche das Array, um zu bleiben, auch wenn der Benutzer die Aktivität verlässt und dann zu einem späteren Zeitpunkt wiederkommen möchte."
Er möchte tatsächlich, dass die Daten gespeichert werden, bis die App geöffnet ist, unabhängig davon, ob der Benutzer die Bildschirme innerhalb der Anwendung ändert.
"Ich brauche das Array jedoch nicht, nachdem die Anwendung vollständig geschlossen wurde."
Aber sobald die Anwendung geschlossen ist, sollten die Daten nicht mehr aufbewahrt werden
SharedPreferences
ist die nicht der optimale Weg dafür.Für diese Anforderung kann eine Klasse erstellt werden, die die
Application
Klasse erweitert.Mit dem Setter und Getter kann von überall mit der Anwendung auf die ArrayList zugegriffen werden. Und das Beste daran ist, dass wir uns nach dem Schließen der App keine Sorgen mehr über die gespeicherten Daten machen müssen. :) :)
quelle