Apps für Android programmieren leicht gemacht!
Einstellungen speichern

Einstellungen speichern

Es gibt viele Wege Daten und insbesondere Texte, Zahlen und ähnliches zu speichern, um es sich zu erhalten und später wieder zu verwenden. Die beste Methode sind Variablen, allerdings werden diese gelöscht/geleert, wenn sich die App schließt.
Wir wollen euch heute zeigen, wie ihr am besten Einstellungen speichern könnt. dabei handelt es sich bei diesen Einstellungen lediglich um kleinere Texte, Zahlen oder Kombinationen, die man in Texten darstellen kann und recht kurz sind.

Will man kurze Einstellungen speichern nutzt man am besten SharedPreferences.
Als erstes müssen wir diese SharedPreferences deklarieren:

//Außerhalb einer Funktion, aber innhalb der gleichen Klasse
SharedPreferences pref;
SharedPreferences.Editor editor;

Anschließend müssen wir innerhalb der Funktion onCreate() SharedPreferences initialisieren:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //shared data vorbereiten
    pref = getSharedPreferences("DerNameEurerApp", 0);
    editor = pref.edit();
}

Nun haben wir alle nötigen Dinge erledigt, um SharedPreferences nutzen zu können.
Wir ändern oder fügen neue Einstellungen wie folgt hinzu:

//Für Strings
editor.putString("NameDerEinstellung", "Inhalt");

//Für Integer
editor.putInt("NameDerEinstellung", 1);

//Für Boolean
editor.putBoolean("NameDerEinstellung", true);

//Für Float
editor.putFloat("NameDerEinstellung", 1);

//Für Long
editor.putLong("NameDerEinstellung", 1);

//Einstellungen speichern
editor.commit();

Und so lest ihr die Daten wieder aus:

//Innerhalb der Klammer beschreibt der erste Wert den Namen der Einstellung, den ihr auslesen wollt.
//Der Wert nach dem Komma innerhalb der Klammer beschreibt den Standartrückgabewert, falls die Einstellung leer ist oder nicht existiert.

//Für Springs
String wert = pref.getString("NameDerEinstellung", "Inhalt");

//Für Integer
int wert = pref.getInt("NameDerEinstellung", 1);

//Für Boolean
boolean wert = pref.getBoolean("NameDerEinstellung", false);

//Für Float
Float wert = pref.getFloat("NameDerEinstellung", 1);

//Für Long
Long wert = pref.getLong("NameDerEinstellung", 1);

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

8 Kommentare

*Pflichtfeld

  • Hallo,
    kannst du mir vielleicht sagen, wo die Einstellungen gespeichert werden? Werden die im Smarthphone (quasi im ordner der app) als text datei gespeichert? weil ich wollte es später (fürs erste) so erweitern, dass ich vielleicht mehrere user habe.

    • Hallo Orhan,
      ich kann dir leider nicht genau sagen, wo die Daten gespeichert werden.
      Wenn du mehrere Benutzer innerhalb einer App/innerhalb eines Gerätes haben möchtest, dann speichere die Daten doch einfach per Benutzernamen + Einstellungsname. Also Beispielweise als editor.putInt(user + "_score", 32458);.

      Gruß

  • Ja, so ähnlich habe ich es gelöst Danke 🙂
    Bleibt so was denn auch hinter der App gespeichert, also so lange bis ich die App lösche? Wollte mit dieser Lösung solche Probleme wie „AGB-nur einmalig“ ok klicken lösen. Mit ner festen putString(„agbaccept“,““) zB.
    Kann man so was eleganter lösen?

    • Hallo MrOrhan,

      solche kleinen Dinge über die im Artikel beschriebene Funktion zu speichern ist schon der kürzeste Weg.
      Die Daten sollten auch erhalten bleiben, bis die App wieder gelöscht wird.

      Persönlich hatte ich mal das Problem, dass diese Einstellungen dann nach einer gewissen Zeit weg waren (nur auf HTC Geräten). So etwas könnte man umgehen, indem man die Daten in einer richtigen .txt Datei speichert. (Artikel dazu: https://droid-lernen.de/textdatei-speichern/)
      Leider konnte ich das Problem nie wirklich lösen/reproduzieren. Auf all meinen Testgeräten hat es super funktioniert, nur hatte eine Person dieses Problem, die sich dann über einen PlayStore Kommentar beschwert hat. Bei dieser Person hätte es auch an besonderen Einstellung in Android liegen können.

      Gruß

    • Kein Problem.
      Wenn ich die 5 Minuten für eine Antwort erübrigen kann, dann werde ich auch versuchen diese 5 Minuten zu nutzen.
      Ich kenne das Problem, wenn man anfängt zu programmieren, vor einem Problem steht und stundenlang nicht weiter kommt. Dafür ist es doch dann um so besser, wenn man Ende die Hilfe bekommt und es funktioniert.

      Gruß

  • Abend,
    ich glaube ich habe eigentlich ein ganz einfach zu lösendes Problem, nur kriege ich es nicht raus. Ich spiele ein bisschen rum von einer Activity zur nächsten Activity zu gelangen. Nur ist mein Problem, dass immer wenn ich die App verlasse oder komplett beende ich wieder von der ersten Activity beginne. Wie kann ich es programmieren, dass ich die App öffne und bei der Activity wieder bin bei der ich die App beendet habe?

    • Hallo Peter,

      folgendes Verhalten ist von Android vorgesehen.
      Du öffnest eine App, die per Launch Icon auf dem Homescreen liegt. Das ist die Hauptactivity.
      Öffnen wir nun eine neue Activity wird die vorige (oder momentan noch aktuelle Activity) in den Hintergrund verschoben und die neue Activity rückt in den Vordergrund.
      Klicken wir nun den Back-Button gelangen wir zur vorigen Activity zurück und die zweite Activity wird gekillt. Bis dahin alles super.

      Nun zu deinem Problem:
      Sagen wir es gibt drei Activities. 1, 2 und 3.
      1 ist unser Einstiegspunkt (liegt als Icon auf dem Homescreen).
      Über 1 öffnen wir dann die 2 und klicken auf den Home-Button. Nach 2 Minuten gehen wir zurück auf die App und gelangen automatisch wieder auf die 2. Activity. Das geschieht, weil unsere App im Hintergrund noch läuft.
      Gleiches gilt für Activity 3, nachdem wir diese aus der 2 heraus geöffnet haben.
      Für dieses Verhalten (das ja scheinbar gewünscht ist) schaue dir bitte diesen Artikel an: >>Activity öffnen< <

      Haben wir jedoch die Activity 2 geöffnet (die Activity 1 ist im Hintergrund verschwunden) und beendet die App über den Taskmanager, dann wird die gesamte App gekillt. Damit auch die Acivity 1, 2 und 3.
      Das ist ein ganz normales Verhalten unter Android.

      Um das Problem zu lösen könntest du in den SharedPreferences (dieser Artikel) speichern, was deine zu letzt geöffnete Activity war und diese dann per Programmcode automatisch beim Start des Einstiegspunktes (Activity 1) wieder öffnen. Speichere einfach bei jedem Aufruf der „onDestroy“ die aktuelle Activity. Wird onCreate der 1. Activity aufgerufen und in den SharedPreferences ist eine Zahl gespeichert, dann öffne die zugehörige Activity Nr. X und lösche dann die gespeicherte Zahl.

      Anbei noch einmal ein Video zu meinem Verhalten nach Vorlage dieses Artikels: >>Activity öffnen< <
      Standardverhalten von Activities