Android programmieren: Globale Variablen bei Android

Hier geht es darum, wie ich unter Android globale Variablen und Werte speichern kann. Für den Interessierten: wenn dein Programm aus mehreren Fenstern (Android: Activities) besteht, willst du vielleicht zwischen den Fenstern Werte austauschen. Zum Beispiel soll in Fenster1 ein Benutzer (User) eingegeben werden, der dann in Fenster2 gespeichert wird.

Doch manchmal sollen Variablen auch ihren Wert behalten, wenn die Software beendet wird und beim nächsten Mal zur Verfügung stehen. Beispiele sind der High Score in Spielen, oder eine Seriennummer, die gewisse Funktionen in der Software frei schaltet.

Android bietet dafür verschiedene Möglichkeiten:

Die Sache mit Intent

Intent definieren, Variablen speichern und neue Activity mit Intent aufrufen:

Intent intent = new Intent(this, ActivityErfassung1.class);
intent.putExtra("ActionId", getString(R.string.s_abgang));
intent.putExtra("User", user);
startActivity(intent);

Konsequenterweise in der neuen Activity dann die Werte aus dem Intent abrufen, damit ihr sie verwenden könnt. Im Beispiel wird der Wert für ActionID gleich in einem TextView angezeigt während der Wert für User in einen String gespeichert wird:

Intent intent = getIntent();
String ActionText = intent.getStringExtra("ActionId");
((TextView) findViewById(R.id.textView_header)).setText(ActionText);
String User = intent.getStringExtra("User");

Wie ihr das mit Intent oder mit Extending the Application Class verwendet, findet ihr hier im YouTube Video:

Shared Preferences

Werte mit Shared Preferences speichern, im Beispiel werden die zu speichernden Werte jeweils einem EditText Feld entnommen und dann mit Shared Pref gespeichert:

//Text1 Text2 in Shared Prefs speichern
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor e = prefs.edit();
EditText et_feld1 = (EditText) findViewById(R.id.editText_textf1);
EditText et_feld2 = (EditText) findViewById(R.id.editText_textf2);
e.putString("TextF1", et_feld1.getText().toString());
e.putString("TextF2", et_feld2.getText().toString());
e.apply();

Und natürlich das Gegenstück – Werte mit Shared Preferences holen, dabei sicherstellen dass ihr auch einen Default Wert bekommt, wenn (noch) keine Werte gespeichert sind. Auch hier gilt: im Beispiel werden die Werte dabei gleich nach dem Auslesen aus Shared Pref in EditText Feldern angezeigt:

//Nun die Texte F1 und F2 holen und anzeigen
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
EditText et_feld1 = (EditText) findViewById(R.id.editText_textf1);
EditText et_feld2 = (EditText) findViewById(R.id.editText_textf2);
et_feld1.setText(prefs.getString("TextF1", "Addon Text1"));
et_feld2.setText(prefs.getString("TextF2", "Addon Text2"));

Für Shared Preferences (wenn die Daten sogar gespeichert bleiben sollen, wenn die Anwendung deaktiv ist) findet sich dann hier das YouTube Video:

Die Liste der Möglichkeiten ist natürlich nicht vollständig. Sie zeigt nur einige, die ich gerne verwende – und wie ich sie verwende. Dabei ist es wie meistens: viele Wege führen nach Rom – und jemand anders wird vermutlich andere Wege finden, sein Ziel zu erreichen.

Text und Entwurf. (c) AE SYSTEME Testcenter
Hans-J. Walter hjw@terminal-systems.de

Hinweis: Alle Angaben ohne Gewähr. Diese Beschreibung bezieht sich auf unsere Installation und stellt keine Bewertung der verwendeten Techniken da.