извлечь тело сообщения из HttpResponse - PullRequest
14 голосов
/ 05 августа 2011

Хорошо, я успешно подключился к удаленному серверу, получил ответ HTTP/1.1 200 OK, и ответ упакован в объект HttpResponse. Теперь, как мне получить из него данные в ответе, в частности, JSON, отправленный с сервера?

Ответы [ 4 ]

25 голосов
/ 05 августа 2011

примерно так: продублируйте здесь: Как мне разобрать JSON из HTTP HTTP-ответа?

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 голосов
/ 05 августа 2011

Ну, вы можете получить тело HttpResponse, вызвав getEntity(), который возвращает объект типа HttpEntity.Затем вы захотите использовать InputStream, который возвращается из getContent() метода HttpEntity.Я бы сделал это так:

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();
}
1 голос
/ 11 декабря 2014

Вы также можете использовать 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: Возможно, вам придется сделать это в отдельном потоке, отличном от основного потока, как в doInBackground () операции AsyncTask или Network для исключения основного потока.

0 голосов
/ 09 октября 2014

Используйте BasicResponseHandler при вызове httpclient.execute ()

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