我通过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
:
如何解决这个问题?
答案 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");