JSONObject在android 4.0上解析,但在早期版本上没有

时间:2012-10-19 11:54:42

标签: android json

我有这个代码从网站上获取json字符串:

post.setEntity(entity);
HttpResponse responsePOST = client.execute(post);  
HttpEntity resEntity = responsePOST.getEntity();
result = EntityUtils.toString(resEntity, HTTP.UTF_8);

这是结果中json的一个例子:

{"status":"0","user_id":"123","name":"test","session_code":"6f33d4ee610651530f04b1f700ebc36d"}

在jsonlint.com上验证。我尝试使用

解析它
JSONObject jo = new JSONObject(result);

在android 4上,代码工作正常,但在早期版本中,它提供了

org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject

当我对json字符串进行硬编码而不是使其在线时,它适用于早期版本。当我记录http请求输出时,我发现除了会话代码之外,它在每个事情上都是相同的,会话代码随着每个成功的请求而变化,但两个会话代码具有相同的长度和格式。

任何人都知道这是什么原因以及如何解决它?


更新:

if (!email.isEmpty() && !password.isEmpty()){
    try {
        HttpClient client = new DefaultHttpClient();  
        String postURL = "http://www.xxxxxx.com/api/login.php";
        HttpPost post = new HttpPost(postURL);
        List<NameValuePair> postParams = new ArrayList<NameValuePair>();
        postParams.add(new BasicNameValuePair("email", email));
        postParams.add(new BasicNameValuePair("pass", password));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams, HTTP.UTF_8);
        post.setEntity(entity);
        HttpResponse responsePOST = client.execute(post);  
        HttpEntity resEntity = responsePOST.getEntity();
        result = EntityUtils.toString(resEntity, HTTP.UTF_8);
    } catch (UnsupportedEncodingException e) {
        Log.e(TAG, e.toString());
    } catch (ClientProtocolException e) {
        Log.e(TAG, e.toString());
    } catch (ParseException e) {
        Log.e(TAG, e.toString());
    } catch (IOException e) {
        Log.e(TAG, e.toString());
    }
}

if (result != null) {
    try {
        JSONObject jo = new JSONObject(result);

        switch (jo.getInt("status")) {
            case 0 : {
                userName = jo.getString("name");
                userID = jo.getInt("user_id");
                authCode = jo.getString("session_code");

                return 0;
            }

            default:
                return jo.getInt("status");
        }

    } catch (JSONException e) {
        Log.e(TAG, e.toString());
    }
}

3 个答案:

答案 0 :(得分:0)

试试这个result = EntityUtils.toString(resEntity);

答案 1 :(得分:0)

您还需要在服务器端(PHP,Node等)实现UTF-8编码,以使Web服务(JSON解析)在您的旧Android(&lt; 4.0)设备上正常工作。试试这个吧!谢谢。

答案 2 :(得分:0)

我认为版本没有问题。

您可能需要检查您要返回的所有类型response

如果发生错误,可能会返回String

如果您每次都将result转换为JSONObject,则必须将JSONObject作为String

返回