Php Android Studio:无法将类型org.json.JSONArray转换为JSONObject
我想创建listview。我指的是 我只得到android的源代码,但没有php。当我创建自己的php文件时,应用程序会继续显示加载,并且从不停止。当我看到日志cat时,它显示类型org.json.JSONArray无法转换为JSONObject 下面是代码 MainActivity.javaPhp Android Studio:无法将类型org.json.JSONArray转换为JSONObject,php,json,android-studio,listview,Php,Json,Android Studio,Listview,我想创建listview。我指的是 我只得到android的源代码,但没有php。当我创建自己的php文件时,应用程序会继续显示加载,并且从不停止。当我看到日志cat时,它显示类型org.json.JSONArray无法转换为JSONObject 下面是代码 MainActivity.java protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lv);
retrieveJSON();
}
private void retrieveJSON() {
showSimpleProgressDialog(this, "Loading...","Fetching Json",false);
StringRequest stringRequest = new StringRequest(Request.Method.GET, URLstring,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("strrrrr", ">>" + response);
try {
JSONObject obj = new JSONObject(response);
if(obj.optString("status").equals("true")){
dataModelArrayList = new ArrayList<>();
JSONArray dataArray = obj.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
DataModel playerModel = new DataModel();
JSONObject dataobj = dataArray.getJSONObject(i);
playerModel.setTitle(dataobj.getString("title"));
playerModel.setShortdesc(dataobj.getString("shortdesc"));
playerModel.setImage(dataobj.getString("image"));
dataModelArrayList.add(playerModel);
}
setupListview();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//displaying the error in toast if occurrs
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
// request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void setupListview(){
removeSimpleProgressDialog(); //will remove progress dialog
listAdapter = new ListAdapter(this, dataModelArrayList);
listView.setAdapter(listAdapter);
}
public static void removeSimpleProgressDialog() {
try {
if (mProgressDialog != null) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
} catch (IllegalArgumentException ie) {
ie.printStackTrace();
} catch (RuntimeException re) {
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void showSimpleProgressDialog(Context context, String title,
String msg, boolean isCancelable) {
try {
if (mProgressDialog == null) {
mProgressDialog = ProgressDialog.show(context, title, msg);
mProgressDialog.setCancelable(isCancelable);
}
if (!mProgressDialog.isShowing()) {
mProgressDialog.show();
}
} catch (IllegalArgumentException ie) {
ie.printStackTrace();
} catch (RuntimeException re) {
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
recyclerview.php
<?php
//database constants
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'recyclerview');
//connecting to database and getting the connection object
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
//Checking if any error occured while connecting
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
die();
}
//creating a query
$stmt = $conn->prepare("SELECT id, title, shortdesc, image FROM products;");
//executing the query
$stmt->execute();
//binding results to the query
$stmt->bind_result($id, $title, $shortdesc, $image);
$products = array();
//traversing through all the result
while($stmt->fetch()){
$temp = array();
$temp['id'] = $id;
$temp['title'] = $title;
$temp['shortdesc'] = $shortdesc;
$temp['image'] = $image;
array_push($products, $temp);
}
//displaying the result in json format
echo json_encode($products);
?>
服务器脚本的当前版本生成以下格式的JSON响应
[
{
"id": 123,
"title": "some title",
"shortdesc": "description here",
"image": "image here"
},
{
"id": 124,
"title": "some other title",
"shortdesc": "description here",
"image": "image here"
}
]
这是JSONArray而不是JSONObject。然而,在您的Android应用程序代码中,您希望得到如下所示的JSON响应
{
"status": "true",
"data": [
{
"id": 123,
"title": "some title",
"shortdesc": "description here",
"image": "image here"
},
{
"id": 124,
"title": "some other title",
"shortdesc": "description here",
"image": "image here"
}
]
}
在PHP代码中,只需进行以下调整
<?php
// other code here ...
//traversing through all the result
while($stmt->fetch()){
$temp = array();
$temp['id'] = $id;
$temp['title'] = $title;
$temp['shortdesc'] = $shortdesc;
$temp['image'] = $image;
array_push($products, $temp);
}
// create an array and add required key-values
$response = array();
$response["status"] = "true";
$response["data"] = $products;
//displaying the result in json format
// pass $response array to json_encode() method
echo json_encode($response);
?>