Подтвердить что ты не робот

Извлечь тело сообщения из HttpResponse

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

4b9b3361

Ответ 1

что-то вроде этого: duplicate here: Как разобрать JSON из 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);

Ответ 2

Ну, вы можете получить тело 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();
}

Ответ 3

Вы также можете использовать 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 в случае исключения основного потока.

Ответ 4

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

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