55 Stimmen

Android Programmierung: Response von HTTP POST Request empfangen

Tutorial von Progger99 | 17.04.2014 um 12:52

Vor einiger Zeit habe ich ein Tutorial geschrieben, wie man in einer Android App Daten mit einem HTTP POST Request an einen Server senden kann. Damals bin ich nicht darauf eingegangen, wie man die Antwort des Servers verarbeiten kann. Das möchte ich daher heute in diesem Tutorial nachholen.

Das Tutorial endete damals mit dem Aufruf folgender Code-Zeile:

HttpResponse response = client.execute(post);

Hier verwaltet "post" unsere Daten und "client" ist unser HTTP-Client, der für uns die POST-Daten mittels "execute()" an den Server sendet. Für eine nähere Erklärung dazu, schaut bitte in mein altes Tutorial, das ich oben verlinkt habe.

Um die Daten vom Server zu empfangen und auszuwerten, speichern wir das Ergebnis von "client.execute(post)" in einem HttpResponse Objekt. Wir nennen dieses Objekt hier "response".

String aus HttpResponse Objekt lesen

Der Inhalt unseres HttpResponse Objekts kann nun natürlich alles sein, was uns der Server an Daten zurückgibt. Im einfachsten Fall ist dies ein einfacher String der nur aus einer Zeile besteht. Um diesen String auszulesen, können wir so vorgehen:

HttpResponse response = client.execute(post);

HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
InputStreamReader inputstream = new InputStreamReader(content, "UTF-8");
BufferedReader reader = new BufferedReader(inputstream);

String s = reader.readLine();

In der ersten Zeite führen wir unseren POST-Request durch. Anschließend bauen wir uns einen "reader", um den Inhalt von "response" zu lesen. Wichtig ist hier die Angabe der richtigen Kodierung. Es ist die Kodierung anzugeben, die der Server zur Ausgabe der Daten benutzt. Das sollte in den meisten Fällen "UTF-8" sein. Man kann die Angabe zur Kodierung aber auch weglassen. Zuletzt speichern wir das Ergebnis im String "s".

Mehrzeiligen String auslesen

Für den Fall dass uns der Server einen String ausgibt, der über mehr als nur eine Zeile geht, können wir den Code so erweitern:

HttpResponse response = client.execute(post);
InputStreamReader inputstream = 
    new InputStreamReader(response.getEntity().getContent(), "UTF-8");
BufferedReader reader = new BufferedReader(inputstream);

StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
    builder.append(line).append("n");
}

String s = builder.toString();

Das Beispiel gleicht dem oberen Code, nur dass wir hier nicht nur eine Zeile sondern mehrere Zeilen auslesen. Zum Auslesen dieser Zeilen benutzen wir einen StringBuilder und gehen das Ergebnis zeilenweise durch.

Weitere Verarbeitung

Nachdem wir unsere Daten in einem String gespeichert haben, stellt sich die Frage nach einer weiteren Verarbeitung der Daten.

Neben einer einfachen Anzeige des Strings kommt die weitere Verarbeitung ganz darauf an, in welchem Format der String aufgebaut ist. Denkbar wäre hier zum Beispiel das JSON Format. In diesem Fall wäre der String mit einem JSON Objekt zu parsen.

HTTP-Statuscode vom Server abfragen

Das HttpResponse Objekt enthält nicht nur den bloßen String, der eventuell vom Server zurückgegeben wurde. Vielmehr lassen sich auch noch weitere Informationen über die Abfrage bekommen. So zum Beispiel der HTTP-Status-Code:

HttpResponse response = client.execute(post);

StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();

if (statusCode == 200) {
  HttpEntity entity = response.getEntity();
  InputStream content = entity.getContent();

  InputStreamReader inputstream = new InputStreamReader(content,"UTF-8");
  BufferedReader reader = new BufferedReader(inputstream);

  String s = reader.readLine();
}

Mit response.getStatusLine().getStatusCode() lässt sich der Status Code unseres POST Requests bestimmen. Im Beispiel testen wir, ob der Status Code 200 (OK) war und fahren nur dann mit dem Lesen fort.

AntwortenPositivNegativDatumStimmen
44 Stimmen

Vielen Dank für das super schnelle coden!!
Werde ich am Wochenende direkt versuchen einzubauen!
Wünsche ein schönes Wochenende
Otmar
17.04.2014 um 14:45

AntwortenPositiv Negativ
22 Stimmen

Der Artikel ist zwar schon mehr als zwei Jahre alt, aber ich hätte eine wichtige Frage: Wie sieht der Code aus, wenn ich zum Beispiel nur die 3.Zeile der mehrzeiligen Antwort(als String) auslesen möchte ?

P.S: Sehr guter & informativer Artikel :)
01.07.2016 um 20:45

AntwortenPositiv Negativ
22 Stimmen

Warum solltest du nicht auf ein altes Thema antworten? Das Thema ist ja immer noch von Interesse.

Zu deiner Frage: Du kannst einfach die Funktion .split() benutzen um deinen String in einen Array zu verwandeln und an einem bestimmten Zeichen zu trennen.

Dazu einfach das betreffende Zeichen übergeben, zum Beispiel das Zeichen für den Zeilenumbruch. Dann kannst du das dritte Element aus dem Array nehmen und hast deine dritte Zeile.
01.07.2016 um 22:12

Positiv Negativ
Antworten
Antworten

Über den Autor

AvatarDer Autor hat keine Kurzbeschreibung seines Profils angegeben.
Profil anzeigen

 

Ähnliche Themen

Android Splash Screen Tutorial

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.