Einführung in die Android-Entwicklung

Einführung in die Android-Entwicklung

von: Marko Gargenta

O'Reilly Verlag, 2012

ISBN: 9783868991994

Sprache: Deutsch

272 Seiten, Download: 5825 KB

 
Format:  EPUB, PDF, auch als Online-Lesen

geeignet für: geeignet für alle DRM-fähigen eReader geeignet für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Apple iPod touch, iPhone und Android Smartphones Online-Lesen PC, MAC, Laptop


 

eBook anfordern

Mehr zum Inhalt

Einführung in die Android-Entwicklung



Die StatusActivity-Java-Klasse


Nachdem wir unser UI in XML entworfen haben, können wir zu Java übergehen. Erinnern Sie sich an das, was wir oben sagten: Android bietet zwei Möglichkeiten, Benutzerschnittstellen aufzubauen, erstens durch Deklaration mit XML, wie wir es gerade bis zu dem Punkt getrieben haben, bis zu dem es uns (aktuell) möglich war, und zweitens mit Java-Code. Wir sagten auch, dass es empfehlenswert ist, so weit wie möglich XML zu nutzen und dann zu Java zu wechseln.

Unsere Java-Klasse dafür ist StatusActivity.java, und der Android-Projektassistent von Eclipse hat bereits ein Gerüst für diese Klasse erstellt. Die Klasse ist Teil des Java-Packages com.marakana.yamba1 und steckt deswegen auch in diesem Verzeichnis.

Den App-spezifischen Objekt- und Initialisierungscode erstellen


Bei allen Android-Grundbausteinen, Activities, Services, Broadcast-Receivern und Content-Providern beginnen Sie üblicherweise damit, dass Sie eine Klasse von der Klasse ableiten, die das Android-Framework stellt, und dann bestimmte vererbte Methoden überschreiben. In diesem Fall leiten wir eine Klasse von Androids Activity-Klasse ab und überschreiben ihre onCreate()-Methode. Wie Sie sich erinnern werden, haben Activities einen bestimmten Lebenszyklus (siehe „Der Lebenszyklus von Activities“) oder eine Zustandsmaschine, die sie durchlaufen. Wir als Entwickler können nicht steuern, in welchem Zustand die Activity ist, aber wir können bestimmen, was beim Übergang zu einem bestimmten Zustand passiert. In diesem Fall ist der Übergang, den wir überschreiben wollen, die onCreate()-Methode, die der ActivityManager des Systems aufruft, wenn die Activity erstellt wird (d.h., wenn sie vom startenden in den laufenden Zustand wechselt). Diese Art der Programmierung, die Ableitung von Systemklassen und das Ausfüllen der Lücken, bezeichnet man als Template-Method-Muster.

Unsere onCreate()-Methode führt, neben den üblichen Haushaltsaufgaben, zwei wichtige Aufgaben aus, die die App nur einmal ganz zu Anfang ausführen muss: den Button einrichten, damit er auf Klick reagiert, und die Verbindung mit der Cloud herstellen.

Beachten Sie, dass onCreate() ein Bundle als Parameter erwartet. Das ist eine kleine Datenmenge, die einer Activity über den Intent übergeben werden kann, der sie anstöst. Die in einem Bundle gelieferten Daten sind üblicherweise auf elementare Datentypen beschränkt. Komplexere Daten müssen speziell kodiert werden. In unserem Yamba-Beispiel werden wir das Bundle in der Regel nicht nutzen, da wir diesen Mechanismus nicht benötigen.

Denken Sie daran, dass Sie beim Überschreiben einer Methode erst die Methode aufrufen sollten, die die ursprüngliche Oberklasse stellt. Deswegen steht hier der super.onCreate()-Aufruf.

Haben Sie die Klasse des Frameworks erweitert, die erforderliche Methode überschrieben und darin die Methode auf super aufgerufen, haben Sie eigentlich noch nichts erreicht: Ihr Code macht genau das Gleiche wie die Oberklasse. Aber jetzt gibt es eine Stelle, an der wir unseren eigenen Code einsetzen können.

Als Erstes laden wir in der onCreate()-Methode einer Activity üblicherweise das UI aus der XML-Datei und generieren es im Java-Speicher. Anders gesagt: Wir schreiben etwas Java-Code, der Ihre XML-Layoutdatei öffnet, parst und für jedes Element im XML das entsprechende Java-Objekt im Speicher erstellt. Für jedes Attribut eines XML-Elements müsste dieser Code ein Attribut auf dem entsprechenden Java-Objekt setzen. Diesen Prozess bezeichnet man als inflating from XML, und er wird von einer Codezeile geleistet: setContentView(R.layout.status);.

Erinnern Sie sich, dass die Klasse R eine automatisch generierte Sammlung von Verweisen ist, die uns die Verbindung der Java-Welt mit dem XML und anderen Ressourcen im /res-Ordner erleichtert. R.layout.status zeigt also auf die Datei /res/layout/status.xml.

Kurz gesagt: Die Methode setContentView() macht ein ganze Menge. Sie liest die XML-Datei, parst sie, erstellt die den XML-Elementen entsprechenden Java-Objekte, setzt die Objekteigenschaften gemäß den XML-Attributen, richtet die Eltern-Kind-Verhältnisse zwischen den Objekten ein und baut den gesamten View auf. Am Ende dieser Zeile ist das Fenster bereit und kann auf den Bildschirm gezeichnet werden.

Ihre Objekte sind nicht die einzigen, die Methoden definieren und auf externe Stimuli reagieren. Androids Benutzerschnittstellenobjekte tun das auch. So können Sie Ihrem Button sagen, dass er bestimmten Code ausführen soll, wenn er angeklickt wird. Dazu müssen Sie eine Methode namens onClick() definieren und den Code dort einsetzen, wo er ausgeführt werden soll. Außerdem müssen Sie die setOnClickListener-Methode auf dem Button aufrufen. Sie übergeben this als Argument an setOnClickListener, weil Sie onClick() in dieser Klasse definiert haben. Listing 6.3 zeigt die erste Version von StatusActivity.java mit einigen zusätzlichen Erläuterungen nach dem Code.

package com.marakana.yamba1; import winterwell.jtwitter.Twitter; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class StatusActivity1 extends Activity implements OnClickListener { // private static final String TAG = "StatusActivity"; EditText editText; Button updateButton; Twitter twitter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.status); // Die Views suchen editText = (EditText) findViewById(R.id.editText); // updateButton = (Button) findViewById(R.id.buttonUpdate); updateButton.setOnClickListener(this); // twitter = new Twitter("student", "password"); // twitter.setAPIRootUrl("http://yamba.marakana.com/api"); } // Wird bei Klicks auf den Button aufgerufen // public void onClick(View v) { twitter.setStatus(editText.getText().toString()); // Log.d(TAG, "onClicked"); } }

Listing 6.3 StatusActivity.java, Version 1

Soll die StatusActivity als Button-Listener dienen können, muss sie das OnClickListener-Interface implementieren.

Sucht die aus dem XML-Layout generierten Views und weist sie Java-Variablen zu.

Registriert this beim Button (d.h. die StatusActivity) für Benachrichtigungen über Klicks.

Stellt die Verbindung mit einem Onlinedienst her, der eine Twitter-API unterstützt. Hier haben wir Benutzername und Passwort fest vorgegeben.

Diese Methode wird aufgerufen, wenn der Button angeklickt wird. Sie ist Teil des OnClickListener-Interface.

Führt den Webservice-API-Aufruf in die Cloud aus, um die Nachricht abzusenden.

Code kompilieren und Projekte erstellen: Dateien speichern


Haben Sie die Änderungen an Ihren Java- oder XML-Dateien vorgenommen, sollten Sie daran denken, sie zu speichern, bevor Sie fortfahren. Eclipse erstellt Ihr Projekt automatisch, wenn Sie File ? Save wählen oder Strg-S drücken. Es ist also wichtig, dass Sie Dateien speichern und darauf achten, dass Sie erst zu anderen Dateien übergehen, wenn die aktuelle Datei sauber ist. Dass Ihre Datei sauber ist, erkennen Sie daran, dass es in Ihrem Code keine kleinen roten x-Symbole gibt und das Projekt sie erfolgreich erstellt. Weil Java von XML abhängt und umgekehrt, wird das Auffinden der Fehler noch schwerer, wenn Sie zu einer anderen Datei wechseln, solange die aktuelle nicht fehlerfrei ist.

Java-Fehler sind üblicherweise leicht zu finden, da Sie das kleine rote x im Code gleich zu der Zeile führt, in der sich der Fehler befindet (siehe Abbildung 6.4). Lassen Sie den Mauszeiger unmittelbar über dem Fehler schweben, sagt Ihnen Eclipse, welcher Fehler es ist, und schlägt Ihnen einige mögliche Reparaturen vor. ...

Kategorien

Service

Info/Kontakt