4 Brain Trainer

Leerdoelen

Na het maken van deze app wordt van je verwacht dat je:

  • een nieuwe activity kunt starten met een Intent
  • data aan een intent kunt meegeven met de methode putExtra en deze kunt opvragen met getXxxExtra
  • waardes kunt opslaan met SharedPreferences en deze kunt opvragen

Opdracht

Bekijk onderstaand filmpje en maak de app.

Gebruikte methodes/klassen

Intent

Om van de ene activity naar de andere te gaan heb je een object van de klasse Intent nodig. De constructor van Intent accepteert twee parameters:

  1. de context. Meestal kun je this gebruiken. Als je vanuit een andere klasse (bijvoorbeeld een binnenklasse of een anonieme klasse) het intent maakt kun je getApplicationContext gebruiken.
  2. de naam van de klasse waar je naar toe wilt gaan gevolgd door .class
//ga naar TimerActivity
Intent intent = new Intent(this, TimerActivity.class);
startActivity(intent);

Waardes meegeven aan een intent

Soms wil je waardes meegeven aan een intent waar in de doel activity iets mee wordt gedaan. In de brain trainer wordt de score van de speler meegegeven zodat kan worden gechecked of er een nieuwe high score is. Hiervoor gebruiken we de methode putExtra. Deze methode accepteert twee parameters:

  1. de key waarmee je de waarde kunt opvragen. Dit is een string.
  2. de waarde zelf, afhankelijk van het type (long, int, double, String etc.).
//ga naar MainActivity
Intent intent = new Intent(this, MainActivity.class);

//geef de variabele score (int) mee
intent.putExtra("score", score);
startActivity(intent);

Waardes van een intent opvragen

In de klasse waar het intent naar toe wordt gestuurd kun je de waarde opvragen met de key die je hebt toegekend. Je kunt verschillende types opvragen met verschillende methoden. Hieronder een aantal veelgebruikte. Voor alle methodes zie klasse Intent

  • getStringExtra
  • getIntExtra
  • getBooleanExtra
  • getDoubleExtra
  • etc...

Als er geen waarde is met die key, dan geeft de methode een default value die je zelf kunt bepalen. In onderstaand voorbeeld geeft de methode 0 terug als er geen intent is of als er geen score is.

// vraag het intent op
Intent intent =  getIntent();

// vraag de meegestuurde integer waarde op
int score = intent.getIntExtra("score", 0);

SharedPreferences

Met de klasse SharedPreferences kun je waardes opslaan in een bestand dat Android voor je bewaart. Je maakt een object van SharedPreferences met de methode getPreferences waarbij je aan moet geven of de gegevens alleen voor de eigen applicatie beschikbaar zijn of ook voor andere apps. Hiervoor kun je een constante van de Context klasse gebruiken. In de Brain Trainer willen we de high score bewaren. Om een waarde op te slaan heb je een object van de binnenklasse SharedPreferences.Editor nodig. Zie voorbeeld hieronder. Met de editor kun je verschillende gegevenstypen opslaan. Zie documentatie.

SharedPreferences prefs = this.getPreferences(Context.MODE_PRIVATE);

//haal de high score (default 0)
int highScore = prefs.getInt("highScore", 0);
Intent intent = getIntent();
int score = intent.getIntExtra("score", 0);
if (score > highScore) {
    highScore = score;
    //Bewaar de nieuwe high score
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("highScore", highScore);
    editor.commit();
}