我有一个应用程序显示ListView中的数据库中的所有项目。但我有一个问题,我只能得到数据库中的第一个元素。如何从PHP获取整个数组?
这是我的PHP代码:
<?php
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
$dbh = $db->connect(); // here you get the connection
$query = "SELECT *FROM lost_cars";
$result = $dbh->prepare($query);
$result->execute();
if (!empty($result)) {
// check for empty result
if ($result->fetchAll() > 0) {
foreach($dbh->query($query) as $row){
$car["id"] = $row['id'];
$car["name"] = $row['name'];
$response["car"] = array();
array_push($response["car"], $car);
// echoing JSON response
//$response["success"] = 1;
echo json_encode($response);
}
} else {
// no car found
$response["success"] = 0;
$response["message"] = "No car found";
// echo no users JSON
echo json_encode($response);
}
} else {
// no car found
$response["success"] = 0;
$response["message"] = "No car found";
// echo no users JSON
echo json_encode($response);
}
>
此代码工作正常,并打印我以前加载一些随机值?
{“car”:[{“id”:“11”,“name”:“fgfg”}]} {“car”:[{“id”:“12”,“name” “SDF”}]} { “车”:[{ “ID”: “14”, “姓名”: “克莱奥”}]} { “车”:[{ “ID”: “15”, “姓名”: “洛拉”}]} { “车”:[{ “ID”: “16”, “名称”: “HOLA”}]} { “车”:[{ “ID”: “17”, “姓名”: “kjlhljh”}]} { “车”:[{ “ID”: “18”, “姓名”: “sdfgsdg”}]} { “车”:[{ “ID”: “19”, “姓名”: “JKL;”}]} { “车”:[{ “ID”: “20”, “名称”: “ASD”}]} { “车”:[{ “ID”: “22”, “姓名” : “ASD”}]} { “车”:[{ “ID”: “23”, “名称”: “sdfsdfd”}]} { “车”:[{ “ID”: “24”, “姓名” : “SDF”}]} { “车”:[{ “ID”: “25”, “名称”: “kgkgkg”}]} { “车”:[{ “ID”: “26”, “姓名” : “dfgdg”}]} { “车”:[{ “ID”: “28”, “姓名”: “SDF”}]} { “车”:[{ “ID”: “29”, “姓名” : “dfsdf”}]} { “车”:[{ “ID”: “30”, “姓名”: “dfgdfg”}]} { “车”:[{ “ID”: “31”, “姓名” : “sadasd”}]} { “车”:[{ “ID”: “32”, “姓名”: “ACA”}]} { “车”:[{ “ID”: “34”, “姓名” : “sdfsdf”}]} { “车”:[{ “ID”: “35”, “名称”: “sdfsdf”}]} { “车”:[{ “ID”: “36”, “姓名” : “HOLA”}]} { “车”:[{ “ID”: “37”, “名称”: “qweqwe”}] } { “车”:[{ “ID”: “38”, “姓名”: “DF”}]} { “车”:[{ “ID”: “39”, “姓名”: “SDA”}] }
然后我成功的解析结果在Android中,这里是JSONParser的片段:
try {
BufferedReader reader = new BufferedReader(new
InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
sb.append(line + "\n");
}
is.close();
json = sb.toString();
jObj = new JSONObject(json); //THE PROBLEM
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " +
e.toString());
}
问题是,当我试图将字符串(JSON)转换成一个JSONObject。当我传递给listView来显示我只获得第一个元素。
这里的ListViewActivity的代码片段:
protected String doInBackground(String... args) {
// Building Parameters
HashMap<String, String> params = new HashMap<>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(URLs.GET_ALL_CARS, "GET",
params);
// Check your log cat for JSON reponse
Log.d("All Cars: ", json.toString());
try {
// Checking for SUCCESS TAG
// int success = json.getInt(TAG_SUCCESS);
//if (success == 1) {
// cars found
// Getting Array of Products
cars = json.getJSONArray(TAG_CARS);
// looping through All Products
for (int i = 0; i < cars.length(); i++) {
JSONObject c = cars.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_ID);
System.out.println(id);
String name = c.getString(TAG_NAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String,
String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
carList.add(map);
}
//}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
AllCarsActivity.this, carList,
R.layout.view_item, new String[]{TAG_ID,
TAG_NAME},
new int[]{R.id.id, R.id.
setListAdapter(adapter);
}
});
}
可能是什么问题就在这里?我一直在搜索几个小时没有成功,我不知道该怎么做。 我很感谢你的帮助,谢谢!