我的Android应用程序存在一些问题。我目前有一个带有JSON的字符串。
HttpResponse response = null;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://www.brocksportfolio.com/GetPendingRequests.php");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("Username", "Brock"));
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
response = httpClient.execute(httpPost);
// writing response to log
Log.d("Http Response:", response.toString());
} catch (IOException e) {
e.printStackTrace();
}
String jsonStr = response.toString();
我正在尝试用它来初始化一个带有该字符串的JSONObject。
JSONObject jsonObj = new JSONObject(jsonString);
我收到此错误。
org.json.JSONException: Value org.apache.http.message.BasicHttpResponse@3526f881 of type java.lang.String cannot be converted to JSONObject
我相信这个错误的原因是因为我正在将HTTPPostResponse转换为字符串,然后尝试将该字符串传递给JSONObject,但我真的不确定如何解决它。谢谢你的帮助!
答案 0 :(得分:2)
试一试:
try {
response = httpClient.execute(httpPost);
String responseBody = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObj = new JSONObject(responseBody);
答案 1 :(得分:0)
实际消息包含BasicHttpReponse
所持有的HttpEntity。您可以从HttpEntity中检索一个InputStream,从其内容中创建一个String,然后从中生成一个JSONObject。
当然,您需要先检查响应代码(即它是200?)。所有这些都非常麻烦且容易出错。
我建议你查看Volley,一个简单的JsonObjectRequest可以像这样简单(来自链接的开发人员文档):
String url = "http://my-json-feed";
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mTxtDisplay.setText("Response: " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});