Android (Client) – PHP (Server) Kommunikation

So gut wie jede App braucht heutzutage eine Verbindung zu einem Server. Apps die nur lokal am Gerät laufen sind einfach nicht mehr zeitgerecht. Man möchte ja seine Daten in irgend einer Art und Weise mit der Welt (oder anderen Geräten) teilen. Das geht von Cloud Diensten bei denen man Dokumente über verschiedene Geräte hinweg bearbeiten kann (man denke an Google Drive) oder einer einfachen Highscore Liste eines Spiels die auch global sein soll. Wie komplex das ganze auch sein mag. Es macht immer das Android Gerät zu einem Client und irgendwo steht ein Server mit dem man sich über das Internet verbindet und Daten austauscht.

Android (Client) – PHP (Server) Kommunikation

Wie funktioniert nun so ein Datenaustausch?Android (Client) - PHP (Server) Kommunikation

Funktionsweise

Für die Kommunikation verwenden wir ganz einfach das HTTP Protokoll. Damit können wir einfach Daten schicken. Im einfachsten Fall rufen wir eine URL auf und übergeben die Parameter als GET Parameter.

Die Kommunikation mit dem Server sieht schematisch so aus:

  • erstellen des Requests (URL + Parameterliste)
  • über HTTP den Request abschicken
  • am Server wird dieser Request bearbeitet
  • je nach Parameter wird ein Respons generiert und zurückgeschickt
  • die Parameter müssen wir aus dem Response auslesen

Um hier nicht immer komplizierte Parameterlisten basteln zu müssen sollte man die Daten in einem üblichen Format schicken (sowohl an den Server als auch wieder zurück an den Client). Dafür gibt es mehrere Möglichkeiten. Am besten ist natürlich, man verwendet dafür einen Standard, für diesen es auch Funktionen gibt die dieses Format lesen und die Werte parsen können. Am besten eignen sich hier XML oder JSON. JSON ist vermutlich sogar einfacher, da es für uns Entwickler lesbarer ist.

Code

Server

Zuerst müssen wir auf unserem Server ein Script erstellen, dass über die URL aufgerufen wird. Dies ist im einfachsten Fall ein PHP Script, welches gar keine Parameter erwartet und einfach eine JSON formatierte Ausgabe zurückgibt. In diesem Fall einfach das Ergebnis einer SQL Abfrage einer MySQL Datenbank auf dem Server:

Im Code habe ich 4 Platzhalter stehen (USERNAME; PASSWORD; DATABASE und TABLENAME) die man durch die entsprechenden Werte der eigenen Datenbank ersetzen muss. Also Den Username und Passwort des Datenbankbenutzers, den Namen der Datenbank und den Namen der Tabelle, welche man abfragen will. Das Ergebnis ist eine JSON Formatierte Version des SQL Statements.

Android Client

Nachdem der Servercode nun steht fehlt noch der entsprechende Client Code.

Das ist eine automatisch generierte Activity eines Standard Android Projekts. Ich habe die onCreate Methode mit dem Code für die Abfrage der Daten vom Server erweitert. Das ganze erfolgt in 3 Schritten:

  1. HTTP Post
    Zuerst fragen wie die Daten über ein HttpPost Objekt vom Server ab. Das Ergebnis speichern wir in einem InputStream.
  2. String parsen
    Wir erzeugen uns aus dem InputStream einen String.
  3. JSON parsen
    Der String entspricht dem Inhalt der JSON Datei. Diese parsen wir nun und holen uns die gewünschten Werte.

Zu guter letzt geben wir noch ID und Name einer Zeile der abgefragten Tabelle im TextView aus, welches im Standard Android Projekt mit erzeugt wird. Damit wir die TextView ansprechen können müssen wir diese im Layout noch durch eine ID ergänzen:

(Visited 8.355 times, 1 visits today)

Das könnte auch interessant sein...

19 Antworten

  1. Ahmad Yahya sagt:

    vielen dank für dein Blog. hat echt weiter geholfen.

  2. Marco Tschannett sagt:

    Vielen Danke für diesen Post, der hilft mir echt weiter.
    Bin gerade in der Vorbereitungsphase zur Matura, und muss deswegen Android usw. lernen (aber auch aus eigenem Interesse ;)).

    Du erklärst die Themen sehr gut, und fängst nicht ganz bei Null an, was ich persönlich gut finde, da dies immer wieder das selbe ist.

    Auch die anderen Themen sind sehr interessant und gut erklärt 🙂

    Du triffst den Nagel auf den Kopf

    MfG Marco

  3. Jörg sagt:

    Hallo Werner Ziegelwanger,

    Ich bin Android Anfänger und Suche nach genau solchen beispielen wie diesem Hier, ich möchte mein Webseiten Projekt gerne auf Android Portieren.
    Ich bedanke mich für den Guten Anfang.

    Konnte es noch nicht Testen, hoffe aber bald so ein paar anfragen an meinen Server senden zu können.

    Jörg

    P.S. hat du noch weitere Beispiele mit Zugriffen und Ausgaben von Webinhalten?

  4. Michael sagt:

    Hallo,
    bei mir funktioniert die App nicht. Beim Start der App stürzt sie ab und es steht: „Test“ wurde beeendet.
    Was habe ich falsch gemacht?

  5. Kilian Bartz sagt:

    Gut erklärt, soweit funktioniert es bei mir, aber wie kann man mit der Android App Sachen auf einem Webserver speichern? (Z.B. nimmt man einen Wert aus einer Datenbank im Internet verarbeitet ihn und speichert ihn anschließend wieder in dieser Datenbank.)

  6. Moritz Valerius sagt:

    Servus,

    ich habe es genauso probiert, wie du. Jedoch erfolgslos 🙁

    Mein Programm bricht in dem try{} ab:

    //http post
    try{

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(„http://192.168.2.111/AndroidApp/MYSQL-VERSUCH/index.php“);
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    is = entity.getContent();

    }catch(Exception e){

    }

    Weiß jemand was ich da falsch mache?

  7. Ralf Richert sagt:

    kann man dieses Script verwenden um ein bestimmtes Handy zu identifizieren.

  8. Daniel sagt:

    Wie würde das nun aussehen wenn der Server nur SSL akzeptiert?

    • Werner Ziegelwanger sagt:

      in der App statt http:// https:// verwenden und in der .htaccess eine http -> https Weiterleitung setzen.

      • Daniel sagt:

        Funktioniert nicht, a) http gibt es auf dem Server nicht nur https. Geb ich in der App https:// an erhalte ich ein Zertifikatsfehler.

        • Werner Ziegelwanger sagt:

          dann dürfte es am SSL Zertifikat liegen

          • Daniel sagt:

            SSL Zertifikat ist sauber und kein selbstsigniertes.

          • Werner Ziegelwanger sagt:

            In dem Fall wird es schwierig. Da müsste man prüfen was das für ein Zertifikat ist…also welche Version TLS und ob die Android Bibliothek dieses unterstützt. Zertifikatsfehler hatte ich bis jetzt nur bei selbst signierten bzw. abgelaufenen Zertifikaten.

Schreibe einen Kommentar

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