类型JSONObject无法在Volley中转换为JSONArray

时间:2015-12-12 01:30:42

标签: android json android-volley

我试图从JSON Feed中读取注册号。

{"error":false,"0":[{"registration_number":"HJ-1756"},{"registration_number":"ABD-1234"}]}

但是我很难用以下代码来完成它。

JsonArrayRequest req = new JsonArrayRequest(Constants.URL_VEHICLE_REG_JSON,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        try {
                            // Parsing json array response
                            // loop through each json object
                            jsonResponse = "";

                            // get an array from the JSON object
                            JSONArray res = (JSONArray) response.get(1);

                            for (int i = 0; i < res.length(); i++) {

                                //JSONObject car = (JSONObject) response.get(i);
                                JSONObject innerObj = (JSONObject)res.get(i);

                                String registrationNumber = innerObj.getString("registration_number");

                                jsonResponse += "registration_number: " + registrationNumber + "\n\n";

                                Log.d(TAG, jsonResponse);

                                items.add(registrationNumber);
                            }



                        } catch (JSONException e) {
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }
                        adapter.notifyDataSetChanged();

                        hideDialog();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                Log.d(TAG, "Error: " + error.getMessage());
                hideDialog();
            }
        });

我尝试将Listener更改为Listener和response。但它没有用。据我所知,我得到了JSONObject。但是我哪里出错了?

2 个答案:

答案 0 :(得分:2)

首先,因为您的JSON响应是JSONObject,所以您应该使用Volley的JsonObjectRequest代替JsonArrayRequest

然后,让我们假设您成功获取JSONObject响应数据,您可以使用以下示例代码:

            if (jsonObject != null && !jsonObject.isNull("0")) {
                JSONArray jsonArray = jsonObject.getJSONArray("0");
                if (jsonArray != null && jsonArray.length() > 0) {
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObj = jsonArray.getJSONObject(i);
                        if (jsonObj != null && !jsonObj.isNull("registration_number")){
                            String regNum = jsonObj.getString("registration_number");
                        }
                    }
                }
            }

希望它有所帮助!

答案 1 :(得分:0)

您尝试此代码

            JSONArray jsonArray = jsonObject.getJSONArray("0");
            if (jsonArray != null) {
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObj = jsonArray.getJSONObject(i);

                        String regNum = jsonObj.getString("registration_number");
                    }