我正在检索JSON数据数组并试图显示并访问它。但是当我试图显示它时,它只显示JSON数据数组中的最后一行。当我尝试执行类似json1.get的操作时( 2)(这里的json1是包含JSONObject的JSONArray)我得到数组超出绑定的错误。 请告诉我我做错了什么以及如何重新检索JSON 以下是此问题的相关代码。
谢谢。
从Freebies.java类调用UserFunctions.java类的getAllFreebies函数
UserFunctions uf = new UserFunctions();
JSONObject json = uf.getAllFreebies();
以下是UserFunctions.java类中我的getAllFreebies()函数的代码:
public JSONObject getAllFreebies(){
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", getAllFreebies_tag));
JSONObject json = jsonParser.getJSONFromUrl(getAllFreebiesURL,params);
JSONArray json1 = new JSONArray();
json1.put(json);
try {
System.out.println(json1.get(2));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
下面是index.php类中的代码,其中我调用了DB_Functions.php类的getFreebies()函数
else if($tag = 'getAllFreebies'){
$username = "";
$catagory = "";
$subcatagory = "";
$title = "";
$condition = "";
$description = "";
$address = "";
$city = "";
$state = "";
$country = "";
$zipcode = "";
$posted_on= "";
$getAllFreebies = $db->getFreebies($username,$catagory,$subcatagory,$title,$condition,$description,$address,$city,$state,$country,$zipcode,$posted_on);
$data = array();
while($row = mysql_fetch_assoc($getAllFreebies)) {
$response["success"] = 1;
$data[] = array(
$response["getAllFreebies"]["username"] = $row["username"],
$response["getAllFreebies"]["catagory"] = $row["catagory"],
$response["getAllFreebies"]["subcatagory"] = $row["subcatagory"],
$response["getAllFreebies"]["title"] = $row["title"],
$response["getAllFreebies"]["item_condition"] = $row["item_condition"],
$response["getAllFreebies"]["description"] = $row["description"],
$response["getAllFreebies"]["address"] = $row["address"],
$response["getAllFreebies"]["city"] = $row["city"],
$response["getAllFreebies"]["state"] = $row["state"],
$response["getAllFreebies"]["country"] = $row["country"],
$response["getAllFreebies"]["zipcode"] = $row["zipcode"],
$response["getAllFreebies"]["posted_on"] = $row["posted_on"]);}
echo json_encode($response);
}// end of getAllFreebies tag
以下是DB_Functions.php
的getFreebies()函数的代码public function getFreebies(){
$result = mysql_query("SELECT * FROM freebie") or die(mysql_error());
return($result);
}
更新:我在JSONParser类中添加了以下内容以解析JSONArray public JSONArray getJSONArrayFromUrl(String url,List params){
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "n");
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
jarray.put(jObj);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jarray;
}
我改变了getAllFreebie()来检索JSONArray
public JSONArray getAllFreebies() {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", getAllFreebies_tag));
JSONArray json = jsonParser.getJSONArrayFromUrl(getAllFreebiesURL,
params);
return json;
}
仍然我只获得单行而不是所有行。任何人都可以告诉我我做错了什么。谢谢:(
答案 0 :(得分:1)
检查以下代码:
JSONObject json = jsonParser.getJSONFromUrl(getAllFreebiesURL,params);
JSONArray json1 = new JSONArray();
json1.put(json);
try {
System.out.println(json1.get(2));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您创建一个新的空 JSONArray
,向其中添加一个元素,然后尝试访问其第二个元素。
getJSONFromUrl
是应该解析对象还是数组?我相信你需要它来代替JSONArray
。
答案 1 :(得分:1)
将您的代码更新为:
// Initialize the array with your JSON string.
JSONArray json1 = new JSONArray(json);
// This line adds your String as the first element to
// the JSON array and is incorrect. You can safely remove it.
//json1.put(json);
编辑:试试您发布的代码的更新版本:
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
try {
// Get our response as a String.
String jsonString = EntityUtils.toString(httpResponse.getEntity());
Log.d(TAG, "JSON: "+jsonString);
// Parse the JSON String into a JSONArray object.
return new JSONArray(jsonString);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;