Gemeinsame Präferenzen unter Android
Werte ausgewählter elementarer Typen (allerdings keine double-Werte) sowie Zeichenfolgen und deren Mengen können in einer gemeinsamen Präferenz gespeichert werden.
Gemeinsame Präferenzen ähneln Bündeln insofern als sie Texten Werte zuordnen, aber es gibt auch einige Unterschiede:
- Eine Präferenz kann weniger Typen von Daten aufnehmen als ein Bündel.
- Eine Präferenz kann Daten dauerhaft im Dateisystem speichern.
Die Schnittstelle »android.content.SharedPreferences«, die von einer gemeinsamen Präferenz implementiert wird, enthält Methoden zum Auslesen benannter elementarer Werte einiger elementarer Typen (allerdings keiner double-Werte), Zeichenfolgen sowie deren Mengen.
Etwaige von den folgenden get-Methoden zurückgegebene Objekte sollten als unveränderlich angesehen werden.
- Auswahl von get-Methoden der Schnittstelle »android.content.SharedPreferences«
int getInt( java.lang.String key, int defValue )
java.lang.String getString( java.lang.String key, java.lang.String defValue ) boolean getBoolean( java.lang.String key, boolean defValue )
float getFloat( java.lang.String key, float defValue )
long getLong( java.lang.String key, long defValue )
java.util.Set< java.lang.String >getStringSet( java.lang.String key, java.util.Set< java.lang.String >defValues )
Eine gemeinsame (“shared ”) Präferenz (»SharedPreferences«) kann von allen Aktivitäten und von anderen Arten von Komponenten einer Anwendung gemeinsam genutzt (also gelesen und geschrieben) werden kann. Sie kann als XML-Datei im Dateisystem abgespeichert werden. Andere Anwendungen oder Geräte können auf solche Dateien aber normalerweise nicht zugreifen. Beim Deinstallieren einer Anwendung werden auch alle ihre gemeinsamen Präferenzen entfernt.
Gemeinsame Fehlpräferenzen
Eine gemeinsame Fehlpräferenz ist ein gemeinsame Präferenz, die zu einem Kontext geliefert wird, wenn weitere Angaben, beispielsweise zum Namen der gemeinsamen Präferenz, fehlen.
Jedem Kontext (beispielsweise einer App oder einer Aktivität) ist eine gemeinsame Fehlpräferenz zugeordnet, die verwendet wird, wenn keine andere Präferenz gewünscht wird. Wie die Verwendung genau erfolgt wird weiter unten gezeigt werden.
Der Präferenzenverwalter
Die Klasse »android.preference.PreferenceManager« enthält eine statische Methode »android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context)«, welche zu einem Kontext dessen gemeinsame Fehlpräferenz liefert. Falls diese Methode während des Ablaufs einer Anwendung erneut mit dem gleichen Argumentobjekt aufgerufen wird, liefert sie auch das gleiche Ergebnisobjekt.
Als Argument sollten bevorzugt Aktivitätskontexte (oder Dienstkontexte, im Gegensatz zu Anwendungskontexten) verwendet werden, da es bei der Verwendung von Anwendungskontexten eher zu Blockaden von Ressourcen kommen kann, falls nicht sorgfältig darauf geachtet wird, Ressourcen wieder freizugen.
Der Präferenzeditor
Um eine Präferenz verändern zu können, muß ein speziellen Präferenzeditor verwendet werden. Dieser kann mit der edit-Methode von der zu verändernden Präferenz erhalten werden.
- Die edit-Methode der Schnittstelle »android.content.SharedPreferences«
android.content.SharedPreferences.Editor edit()
Mit einem Editor können mehrere Veränderungen zunächst gesammelt und dann auf ein Mal auf eine Präferenz angewendet werden, wie weiter unten gezeigt werden wird.
Das Editieren einer Präferenz
Ein Editor implementiert die Schnittstelle »android.content.SharedPreferences.Editor«, die es erlaubt, Werte für Zeichenfolgen festzulegen. Alle damit festgelegten Festlegungen werden zunächst gesammelt und erst durch eine Aufruf von »commit« oder »apply« wirklich gespeichert. Durch einen Aufruf von »clear()« werden am Anfang des Speicherns alle bisher in der Präferenz vorhandenen Einträge gelöscht. Mit einer put-Methoden kann ein Eintrag mit einem Namen und einem Wert eines bestimmten Typs zur Präferenz hinzugefügt werden.
- Schnittstelle »android.content.SharedPreferences.Editor« (put-Methoden)
SharedPreferences.Editor clear() android.content.SharedPreferences.Editor putInt( java.lang.String key, int value )
android.content.SharedPreferences.Editor putString( java.lang.String key, String value ) android.content.SharedPreferences.Editor putStringSet( java.lang.String key, java.util.Set< java.lang.String >values )
android.content.SharedPreferences.Editor putBoolean( java.lang.String key, boolean value )
android.content.SharedPreferences.Editor putFloat( java.lang.String key, float value )
android.content.SharedPreferences.Editor putLong( java.lang.String key, long value )
Das Speichern eines Editors
- Schnittstelle »android.content.SharedPreferences.Editor« (weitere Methoden)
void apply()
boolean commit()
Mit »apply()« werden die Änderungen an der Präferenz vollzogen. Außerdem wird parallel ein Vorgang gestartet, der die neue Präferenz auch dauerhaft im Dateisystem festhält; Falls dieser parallele Vorgang scheitern sollte, erfährt der Aufrufer aber nichts davon. Der Aufruf von »apply()« kann schon beendet sein, während der gestartete Vorgang noch parallel weiterläuft.
Bei einem Aufruf von »commit()« werden die Änderungen in der Präferenz vollzogen. Außerdem wird die neue Präferenz auch dauerhaft im Dateisystem festgehalten. Der Aufruf von »commit()« ist erst beendet, wenn feststeht, ob das Speichern im Dateisystem erfolgreich war, in welchem Falle »true« zurückgegeben wird.
Falls die Methode »clear()« aufgerufen wird, so werden beim Speichern der Festlegungen mit »commit()« oder »apply()« zunächst alle schon in der Präferenz enthaltenen Festlegungen gelöscht. Die einzigen Werte, die nach dem Speichern in der Präferenz enthalten sind, sind dann also die mit dem gespeicherten Editor vorgenommenen. Auch wenn »clear()« dabei erst nach den put-Methoden aufgerufen wurde, wird es bei Speichern doch zuerst vollzogen.