Хорошо, я успешно подключился к удаленному серверу и получил ответ HTTP/1.1 200 OK
, и ответ упакован в объект HttpResponse. Теперь, как я могу получить данные из ответа, в частности, JSON, который был отправлен с сервера?
Извлечь тело сообщения из HttpResponse
Ответ 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);