【发布时间】:2011-08-05 04:54:56
【问题描述】:
好的,我已经成功连接到远程服务器并收到HTTP/1.1 200 OK 响应,并且响应被打包到 HttpResponse 对象中。现在如何从中获取响应中的数据,特别是从服务器发送的 JSON?
【问题讨论】:
标签: android json httpresponse
好的,我已经成功连接到远程服务器并收到HTTP/1.1 200 OK 响应,并且响应被打包到 HttpResponse 对象中。现在如何从中获取响应中的数据,特别是从服务器发送的 JSON?
【问题讨论】:
标签: android json httpresponse
类似这样:在此处复制: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);
【讨论】:
好吧,你可以通过调用getEntity() 来获取HttpResponse 的主体,它返回一个HttpEntity 类型的对象。然后,您将需要使用从HttpEntity 的getContent() 方法返回的InputStream。我会这样做:
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();
}
【讨论】:
您也可以使用 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 : 您可能必须在主线程之外的单独线程中执行此操作,例如在 AsyncTask 的 doInBackground() 中,或者可能会发生主线程上的网络操作异常。
【讨论】:
调用 httpclient.execute() 时使用 BasicResponseHandler
ResponseHandler <String> resonseHandler = new BasicResponseHandler();
String response = httpclient.execute(httpget, resonseHandler);
【讨论】: