Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Android Studio:无法将类型org.json.JSONArray转换为JSONObject_Php_Json_Android Studio_Listview - Fatal编程技术网

Php Android Studio:无法将类型org.json.JSONArray转换为JSONObject

Php 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

我想创建listview。我指的是

我只得到android的源代码,但没有php。当我创建自己的php文件时,应用程序会继续显示加载,并且从不停止。当我看到日志cat时,它显示类型org.json.JSONArray无法转换为JSONObject

下面是代码

MainActivity.java

   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);

?>