java - 如何访问数组名称以获得列表?

标签 java android json android-volley

在我的项目中,我正在尝试获取数据,数据位于数组内,因此我执行了所需的步骤,但数组在数据中有一个名称,我不知道如何传递“listCar”[].

这是我的获取代码:

private void getData() {
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            for (int i = 0; i < response.length(); i++) {
                try {

                    JSONObject jsonObject = response.getJSONObject(i);

                    CarClass car = new CarClass();
                    car.setTitle(jsonObject.getString("adTitle"));
                    car.setDate(jsonObject.getString("adDate"));
                    car.setPrice(jsonObject.getDouble("adPrice"));
                    car.setCategory(jsonObject.getString("category"));
                    car.setBrand(jsonObject.getString("brand"));
                    car.setBrandModel(jsonObject.getString("brandModel"));
                    car.setKilometer(jsonObject.getDouble("kilometer"));
                    car.setModelYear(jsonObject.getString("modelYear"));
                    car.setFuel(jsonObject.getString("fuelType"));
                    car.setGear(jsonObject.getString("gearType"));

                    carClassList.add(car);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Volley", error.toString());
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(jsonArrayRequest);
}

这是我收到的日志错误:

E/Volley: com.android.volley.ParseError: org.json.JSONException: Value of type org.json.JSONObject cannot be converted to JSONArray

回应:

{
  "listCar": [
    {
      "id": 204,
      "adTitle": null,
      "adDate": "2019-11-07T11:52:40.0156875",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 203,
      "adTitle": null,
      "adDate": "2019-11-07T11:52:37.7771547",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 202,
      "adTitle": null,
      "adDate": "2019-11-07T11:52:35.5569602",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 201,
      "adTitle": null,
      "adDate": "2019-11-07T11:52:33.2120309",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 200,
      "adTitle": null,
      "adDate": "2019-11-07T11:52:30.8982098",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 199,
      "adTitle": null,
      "adDate": "2019-11-07T11:52:15.1157196",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 198,
      "adTitle": null,
      "adDate": "2019-11-07T11:50:09.5922072",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 197,
      "adTitle": null,
      "adDate": "2019-11-07T11:44:08.8795626",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 196,
      "adTitle": null,
      "adDate": "2019-11-07T11:42:40.3744716",
      "adPrice": 25,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 6,
      "brandModel": "M300",
      "kilometer": 300,
      "modelYearId": 2,
      "modelYear": "2010",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "automatic",
      "carFeatureGearId": 2,
      "image": null,
      "vendorId": 1
    },
    {
      "id": 195,
      "adTitle": null,
      "adDate": "2019-11-07T09:34:43.119591",
      "adPrice": 2400,
      "category": "car child 1",
      "categoryId": 7,
      "status": 1,
      "brandId": 1,
      "brand": "mercedes",
      "brandModelId": 5,
      "brandModel": "M500",
      "kilometer": 170000,
      "modelYearId": 4,
      "modelYear": "2012",
      "fuelType": "benz",
      "carFeatureFuelId": 3,
      "gearType": "normal",
      "carFeatureGearId": 1,
      "image": {
        "path": "Upload/UploadCarMain/UploadCarMain-200-200/30032235992008220498istanbul_adalarCar195.jpg",
        "name": "30032235992008220498istanbul_adalarCar195.jpg"
      },
      "vendorId": 14
    }
  ],
  "count": 74,
  "responseStatusCode": 1,
  "descriptionResponse": "Success"
}

如何将“listCar”传递给我的响应以访问数据?

最佳答案

您必须使用 JsonObjectRequest 而不是 JsonArrayRequest,因为您的响应实际上是 JSONObject

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {

        try {
            JSONArray jsonArray = response.getJSONArray("listCar");

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);

                CarClass car = new CarClass();
                car.setTitle(jsonObject.getString("adTitle"));
                car.setDate(jsonObject.getString("adDate"));

                // Left of the implementation

            }
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Volley", error.toString());
    }
});

RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonObjectRequest);

关于java - 如何访问数组名称以获得列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095197/

相关文章:

java - HtmlUnitDriver 抛出 java.lang.ExceptionInInitializerError

android - 无法让渐变背景看起来不错?

java - 将 Json 转换为对象时出现 com.fasterxml.jackson.databind.JsonMappingException

php - 评论数组/循环不循环

objective-c - NSDictionary 类的 JSONRepresentation 如何工作?

java - 类加载器和 Class.forName()

java - SQL try catch 永远无法捕获(实现超时?)

java - 覆盖数组中图像的特定坐标

Android Fragment - 检测 View 是否处于 Activity/可见状态

android - 我在 Android Q 中将 IMEI 设为空?