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?
Antworten
Zu viele Anzeigen?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...
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());
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);
}
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 !!! :)
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() })
}