2013-03-25 14 views
12

Ich habe einige wirklich hässlich suchen Code von Menschen gesehen, ihre eigenen Methoden der Umwandlung eines Httpresponse in eine Zeichenfolge später zu verwenden, das Schreiben auf, die etwa wie folgt aussieht:Wie bekomme ich eine Zeichenfolge von meiner HTTP-Antwort android?

httppost.setEntity(new UrlEncodedFormEntity(valuePairs)); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
InputStream is = entity.getContent(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF8"),8); 
StringBuilder sb = new StringBuilder(); 
sb.append(reader.readLine() + "\n"); 
String line="0"; 
while ((line = reader.readLine()) != null) { 
    sb.append(line + "\n"); 
} 
is.close(); 
String result = sb.toString(); 

nicht nur, dass etwas ist ein Durcheinander , aber es ist wirklich hässlich und ich kann oft nicht sagen, was mit dem Code los ist, weil dieses Durcheinander vorangeht. Gibt es einen besseren Weg, dies zu tun?

Antwort

42

JA, ES GIBT! Sie können alles in einer Linie tun! Genau wie folgt aus:

response = client.execute(post); 
String responseStr = EntityUtils.toString(response.getEntity()); 

glücklich app machen

+0

Es gibt ein Problem damit. Wenn die Antwort gezippt wird, funktioniert das nicht. Sie müssen 'InputStream stream = AndroidHttpClient.getUngzippedContent (response.getEntity());' und wandeln dann den InputStream in eine Zeichenfolge um. Ich habe noch keinen besseren Weg gefunden. –

+1

ist möglich funktioniert 2013, aber 2016 nicht! Das ist mein Fehler -> Methode hat 'java.lang.IllegalStateException' Ausnahme ausgelöst. – delive

4

ich tat es mit Response-Handler vom HttpClient.execute documentation. Die Verwendung von Handler als zweiter Parameter für die .execute-Methode legt fest, in welchem ​​Format die Antwort sein soll.
Mein Code ist wie folows:

HttpClient client = new DefaultHttpClient(); 

     HttpGet request = new HttpGet(params[0]); 
     ResponseHandler<String> handler = new BasicResponseHandler(); 
     String response = ""; 
     try { 
      response = client.execute(request, handler); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

params[0] eine URL in Form einer Zeichenfolge. Es kann wichtig sein zu sagen, dass mein Server Antworten in JSON zurückgibt. Also konvertiere ich am Ende meine response Zeichenfolge in JSON.

+0

Funktioniert gut für mich, meine Promotion-Code-Validierungsserver geben die einfache Zeichenfolge "VALID" oder "INVALID" zurück. –

Verwandte Themen