2011-08-05 18 views
13

Bien, me he conectado con éxito a un servidor remoto y he recibido una respuesta HTTP/1.1 200 OK y la respuesta está empaquetada en el objeto HttpResponse. ¿Ahora cómo obtengo los datos en la respuesta, específicamente el JSON que se envió desde el servidor?extraer el cuerpo del mensaje de HttpResponse

Respuesta

24

algo como esto: duplicar aquí: How do I parse JSON from a Java HTTPResponse?

HttpResponse response; // some response object 
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
String json = reader.readLine(); 
JSONTokener tokener = new JSONTokener(json); 
JSONArray finalResult = new JSONArray(tokener); 
4

Bien, puede obtener el cuerpo del HttpResponse llamando al getEntity() que devuelve un objeto del tipo HttpEntity. A continuación, querrá consumir el InputStream que se devuelve desde el método getContent() del HttpEntity. Yo lo haría así:

public static String entityToString(HttpEntity entity) { 
    InputStream is = entity.getContent(); 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder str = new StringBuilder(); 

    String line = null; 
    try { 
    while ((line = bufferedReader.readLine()) != null) { 
     str.append(line + "\n"); 
    } 
    } catch (IOException e) { 
    throw new RuntimeException(e); 
    } finally { 
    try { 
     is.close(); 
    } catch (IOException e) { 
     //tough luck... 
    } 
    } 
    return str.toString(); 
} 
0

Utilice un BasicResponseHandler al llamar httpclient.execute()

ResponseHandler <String> resonseHandler = new BasicResponseHandler(); 
String response = httpclient.execute(httpget, resonseHandler); 
1

También puede utilizar EntityUtils

response = cl.execute(p); //cl is http client and p is the post request 

if(response.getStatusLine().getStatusCode()==200) 
{ 
    try 
    { 
     String resp_body = EntityUtils.toString(response.getEntity()); 
     Log.v("resp_body", resp_body.toString()); 
     JSONObject jsobj = new JSONObject(resp_body); 
    } 
    catch(Exception e) 
    { 

     Log.e("sometag",e.getMessage()); 
    } 
} 

PS: Es posible que tenga que hacer esto en un subproceso diferente al del subproceso principal, como en el doInBackground() de una operación AsyncTask o una operación de red en la excepción de subproceso principal.

Cuestiones relacionadas