Android: Übergabe von Parametern

In diesem kurzen Tutorial möchte ich gerne erklären wie ich Transferobjekte von einer Intent zur anderen übergebe.

Einbinden der Bibliothek GSON

Bei dieser Übergabe hilft mir die Bibliothek GSON von Google, welche in der Datei „build.gradle (Module : app)  folgendermaßen eingebunden wird:

dependencies {
    ...
    compile group: 'com.google.code.gson', name: 'gson', version: '2.7'
}

Ggf. können in dem Abschnitt „dependencies“ weitere Bibliotheken oder Pfade stehen welche natürlich nicht überschrieben werden sollten.
Wenn der Pfad zur Bibliothek hinzugefügt und die Datei gespeichert wurde muss eine Syncronisation durchgeführt werden. Dazu klicken Sie auf den Hyperlink „Sync now“ oben links.
Es wird nun die Bibliothek aus dem Internet geladen und bereitgestellt dieses dauert je nach Verbindung und Geschwindigkeit des Computers.

Eine JUnit Testklasse für GSON

Um zu Testen das mein Transferobjekt, in diesem Fall die Klasse „RechenknirpsTO“ nach JSON und von JSON wieder korrekt in die Klasse gewandelt wird habe ich folgende JUnit Klasse geschrieben.

public class RechenknirpsTOTest {

    private RechenknirpsTO originalRechenknirpsTO;

    @Before
    public void beforeTest(){
        originalRechenknirpsTO = new RechenknirpsTO();
        originalRechenknirpsTO.setName("Stefan");
        originalRechenknirpsTO.setDiv(false);
        originalRechenknirpsTO.setMal(false);
        originalRechenknirpsTO.setMinus(true);
        originalRechenknirpsTO.setPlus(true);
        originalRechenknirpsTO.setZahlenraum(100);
    }

    @Test
    public void shouldBeTheSame(){
        Gson gson = new Gson(); //erstellen / instanzieren des Objektes Gson
        String value = gson.toJson(originalRechenknirpsTO); // Umwandeln des Transferobjektes in ein JSON

        RechenknirpsTO rechenknirpsTO = gson.fromJson(value,RechenknirpsTO.class); // Umwandeln des JSON in das Transferobjekt
        assertEquals(rechenknirpsTO,originalRechenknirpsTO); // prüfen ob beide Objekte gleich sind
    }
}

Übergabe von Parametern einer Intent

Eine Intent kann über die Methode „getExtras“ verschiedene Parameter bekommen, jedoch ist leider nicht die Übergabe von Objekten vorgesehen (vielleicht kommt das ja in einer späteren Version). Daher müssen wir nun über den Weg des JSON gehen:

Intent intent = new Intent(getApplicationContext(), GameActivity.class);
Gson gson = new Gson(); // erstellen / instanzieren des Gson Objektes
String value = gson.toJson(rechenknirpsTO); // umwandlung vom Transferobjekt in ein JSON
intent.putExtra("rechenknirpsTO",value); // setzen des JSON mit dem Key "rechenknirpsTO"
startActivityForResult(intent, 0); //starten der Intent

Auslesen der Parameter

Um nun in der neuen Activity das Transferobjekt zu bekommen muss man sich in der Activitya die Intent holen und dort das Bundle laden dieses geschieht mit der Methode „getExtras()“.
Dieses Bundle Objekt enthält nun das Transferobjekt welches mit dem Key „rechenknirpsTO“ abgelegt wurde. Nun kann wiederum mithilfe der Gson Bibliothek das Transferobjekt aus dem JSON generiert werden (siehe JUnit Test).

In meiner Activity sieht das dann folgendermaßen aus:

Intent intent = getIntent(); // holen der Intent in einer Activity
Bundle bundle = intent.getExtras(); // das Bundle Objekt holen
Object o = bundle.get("rechenknirpsTO"); // aus dem Bundle Objekt der Wert zum Key "rechenknirpsTO" holen
Gson gson = new Gson(); // erstellen / instanzieren des Gson Objektes
RechenknirpsTO rechenknirpsTO = gson.fromJson(o.toString(),RechenknirpsTO.class); // umwandeln des JSON in das Transferobjekt mit Gson

Damit habe ich nun das Transferobjekt von einer in die andere Activity transferiert ohne das eine Statische Klasse oder andere Hilfsmittel verwendet werden musste.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.