Apps für Android programmieren leicht gemacht!
4.4 Kaffee Clicker

4.4 Kaffee Clicker

Die Programmierung unserer ersten eigenen Android App Kaffee Clicker läuft doch schon einmal recht geschmeidig, findest du nicht auch?

Was dir in unseren letzten Artikeln und beim mehrfachen Öffnen der App allerdings aufgefallen sein sollte ist, dass es unserer App bisher noch nicht möglich ist den Spielstand zu speichern. Ergo fangen wir bei jedem erneuten Öffnen unseres Spieles von Neuem an. Das ist recht ungünstig und wird uns harte Rezensionen im Google PlayStore einbringen.
Dieser Artikel beschäftigt sich mit der Speicherung der Daten unter Android.

 

Speicherart:

Es gibt in Java unter Android diverse verschiedene Möglichkeiten Daten zu speichern.
Wir könnten nun eine Datei erstellen, mit den nötigen Daten codieren und abspeichern.
Wir haben ebenso die Möglichkeit eine Datenbank zu implementieren und die Daten in ihr zu verwalten.
Alternativ dazu bietet Android auch die Möglichkeit kleine Einträge über kurze Befehle zu speichern und auszulesen.

Ich persönlich habe mich für unsere erste eigene Android App Kaffee Clicker dazu entschieden unseren Spielstand per dritter Möglichkeit zu verwalten.
Eine Datenbank zu erstellen wäre viel zu überdimensioniert, für 4 kleine Variablen.
Variante eins wäre an sich keine schlechte Idee, aber dann müssen wir uns mit der Codierung und Decodierung der Daten beschäftigen.

 

Unsere Funktionen:

Da wir uns nun entschieden haben, wie unsere Daten zu speichern sind benötigen wir lediglich zwei kleinere Funktionen.
Wir nennen die beiden Funktionen praktischerweise „speichern“ und „laden“.
An „speichern“ werden wir den Namen der zu speichernden Information und den Wert dieser übergeben.
An „laden“ werden wir den Namen der zu ladenden Information und einen Standardwert übergeben und hoffen, dass wir den zuvor gespeicherten Wert wieder zurückgegeben bekommen. Der Standardwert wird immer dann zurückgegeben, wenn wir vorher noch nichts gespeichert hatten (wie beim ersten öffnen der App).

 

Vorarbeit:

Wir müssen noch ein kleines bisschen Vorarbeit für unsere Speichermethode leisten. Keine Angst, es handelt sich nur um 6 kleine Zeilen.

Als Erstes ist es von Nöten, dass wir innerhalb der äußersten „{}“-Klammern, aber nicht innerhalb der Funktion „onCreate“ zwei Variablen global definieren:

//Variablen, für das Speichern von unserem Spielstand
private SharedPreferences pref;
private SharedPreferences.Editor editor;

Sie können unterhalb unserer bereist definierten Variablen stehen.

Anschließend müssen diese Variablen noch mit Daten bestückt werden. Dazu fügen wir 3 Zeilen Code in die Funktion „onCreate“ und unterhalb der Zeile „geldAnzeige = (TextView) findViewById(R.id.geldAnzeige);“ ein:

//Shared Data vorbereiten
pref = getSharedPreferences("KaffeeClicker", 0);
editor = pref.edit();

 

 

Speichern:

Da haben wir ja bereits unsere Vorarbeit geleistet haben, können wir nun die Funktion zur Speicherung des Spielstandes programmieren.
Zu dieser Funktion muss noch ein bisschen vorgegriffen werden.
Wir wollen an die Funktion „speichern“ einen Namen und den zu speichernden Wert übergeben. Leider tut sich nun hier ein Problem auf.

Wir versuchen Werte wie die Ausbaustufe der Shops zu speichern, welche als Ganzzahlen (int) definiert sind.
Gleichzeitig versuchen wir aber einen Wert wie das momentane Geld zu speichern, welcher eine Kommazahl ist (float).
Da wir in Java aber eine typisierte Sprache vorliegen haben, was bedeutet, dass wir definieren müssen was für eine Datentyp kommt, sind wir gezwungen 2 Funktion zu schreiben.

Beide Funktionen werden „speichern“ heißen und beide werden als erste Übergabe auch einen String für den Namen der Information erwarten, aber eine Funktion „speichern“ wird anschließend eine Ganzzahl erwarten und die andere Funktion „speichern“ eine Kommazahl.

Da nun beide Funktionen gleich heißen wird Java automatisch die Funktion auswählen, zu der die übergebenen Datentypen passen. Mehr dazu in Kapitel 2.9 unter dem Punkt Überladen.

//Funktion "speichern", für Ganzzahlen (int)
public void speichern(String name, int wert){
  //Wert für die Speicherung vorbereiten
  editor.putInt(name, wert);

  //Wert speichern
  editor.commit();
}

//Funktion "speichern", für Kommazahlen (float)
public void speichern(String name, float wert){
  //Wert für die Speicherung vorbereiten
  editor.putFloat(name, wert);

  //Wert speichern
  editor.commit();
}

 

Das war doch garnicht so schwierig.

 

Laden:

Schmeißen wir uns nun die Funktion „laden“, um unseren Spielstand wieder auslesen zu können.

Auch hier treffen wir wieder auf das Problem, dass wir mit Java eine typisierte Programmiersprache vorliegen haben.
Wir müssen nämlich nicht nur definieren welchen Datentyp eine Funktion in der Übergabe erwartet, sondern auch welchen Datentyp eine Funktion zurückliefen soll.
Es bedarf hier ebenfalls zweier verschiedener Funktionen, die einmal eine Ganzzahl (int) und einmal eine Kommazahl (float) zurückliefern soll.

Dieses mal übergeben wir an die Funktion „laden“, die eine Ganzzahl (int) zurückliefen soll, einen String, für den Namen der Information, und eine Ganzzahl (int) als Standardwert.
An die Funktion „laden“, die eine Kommazahl (float) zurückliefen soll, übergeben wir einen String, für den Namen der Information, und eine Kommazahl (float) als Standardwert.

//Funktion "laden", für Ganzzahlen (int)
public int laden(String name, int standardwert){
  return pref.getInt(name, standardwert);
}

//Funktion "laden", für Kommazahlen (float)
public float laden(String name, float standardwert){
  return pref.getFloat(name, standardwert);
}

 

Speichern und Laden:

Supi, die Hauptarbeit ist geleistet.
Wir haben nun 4 neue Funktionen zum Speichern und zum Laden von Ganzzahlen und Kommazahlen.

Machen wir uns daran sie in unserer App Kaffee Clicker zu verwenden.

Wir fügen in die Funktion „onCreate“ und unter der Zeile „editor = pref.edit();“ ein:

//Lade die Spielstände in die Variablen. Falls noch keine Spielstände vorhanden sind, dann benutze die Werte der Variablen, die hier drüber definiert wurden.
geld = laden("Geld", geld);
recycling = laden("Recycling", recycling);
shops =  laden("Shops", shops);
rabatt =  laden("Rabatt", rabatt);

 

Wir fügen in die Funktion „kaufeShop“ und unter der Zeile „geldAnzeige.setText(„Geld: „ + geld + „€“);“ ein:

speichern("Shops", this.shops);

 

Wir fügen in die Funktion „kaufeRecycling“ und unter der Zeile „geldAnzeige.setText(„Geld: „ + geld + „€“);“ ein:

speichern("Recycling", this.recycling);

 

Wir fügen in die Funktion „kaufeRabatt“ und unter der Zeile „geldAnzeige.setText(„Geld: „ + geld + „€“);“ ein:

speichern("Rabatt", this.rabatt);

 

Wir fügen in die Funktion „verkaufeKaffee“ und unter der Zeile „geldAnzeige.setText(„Geld: „ + geld + „€“);“ ein:

speichern("Geld", this.geld);

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.

Kommentar hinzufügen

*Pflichtfeld