为什么json解析不起作用?

时间:2014-02-25 13:18:46

标签: android json

我通过JSON-Parsing获取数据,但获取“NullPointerException”和Error A JSONArray text must start with '[' at character 1 of {。以下是我到目前为止所尝试的内容:

/** Method for returning JSONObject */
protected JSONObject lastTweet() {

    try {
        HttpGet request = new HttpGet("http://api.androidhive.info/contacts/");
        HttpResponse response = client.execute(request);
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode >= 200) {
            HttpEntity entity = response.getEntity();
            String data = EntityUtils.toString(entity);
            JSONArray jsonArray = new JSONArray(data);
            JSONObject lastT = jsonArray.getJSONObject(0);
            return (lastT);
        } else {
            Log.e(MY_TAG, "Error");
            return null;
        }

    } catch (ClientProtocolException e) {
        Log.e(MY_TAG, "Error " + e.getMessage());
        return null;
    } catch (IOException e) {
        Log.e(MY_TAG, "Error " + e.getMessage());
        return null;
    } catch (JSONException e) {
        Log.e(MY_TAG, "Error " + e.getMessage());
        return null;
    }

}

现在,当我真正让这段代码为我工作时:

new AsyncTask<String, Integer, String>() {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setTitle("Please wait..");
            dialog.setMessage("Data is being loaded");
            dialog.show();
        }

        @Override
        protected String doInBackground(String... params) { // TODO
            try {
                jsonObject = lastTweet();
                return jsonObject.getString("name");
            } catch (JSONException e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(String result) { // TODO
            super.onPostExecute(result);
            textView.setText(result);
            dialog.dismiss();
        }

    }.execute(null, null, null);

给了我以下LogCat

Logcat snap shot

如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

错误包含解决方案:

A JSONArray text must start with '['

检查回复是以[而不是{开头的。 如果确实如此,则表示您正在接收JSONObject,而不是JSONArray。

答案 1 :(得分:1)

您正在json数组中存储json对象

使用此::       JSONObject jsonObject = new JSONObject(data);

答案 2 :(得分:0)

JSON应该以{和}开头和结尾,你确定你的json是

{"contacts":[{},{}]}

而不仅仅是

"contacts":[{},{}]

答案 3 :(得分:0)

你正在回顾的Json不是JSONArray,它是一个JSONObject

改变这个:

JSONArray jsonArray = new JSONArray(data);

对此:

JSONObject jsonObject = new JSONObject (data);
JSONArray contactsJsonArray = jsonObject.getJSONArray("contacts");

// TODO: loop over contactsJsonArray
JSONObject contactJsonObject = contactsJsonArray.getJSONObject(0);
String nameOfAContact = contactJsonObject.getString("name");

答案 4 :(得分:0)

您正在JSONObject投射JSONArray。 改变这个

JSONArray jsonArray = new JSONArray(data);

到这个

JSONArray jsonArray = new JSONObject(data).getJSONArray("contacts");