将String转换为JSONObject时出错

时间:2015-03-18 17:08:45

标签: android json

我的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,但我真的不确定如何解决它。谢谢你的帮助!

2 个答案:

答案 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

    }
});