将Json对象转换为数组

时间:2018-04-03 09:29:05

标签: android arrays json android-volley

我需要帮助修改我的android studio代码以将Json对象转换为数组。 Bellow是我的日志cat和实际代码中的错误。

这是我在logcat中收到的错误消息:

04-03 12:01:16.727 19993-19993/com.errandit E/Volley: com.android.volley.ParseError: org.json.JSONException: Value {"data":[{"errand":"Shopping","charges":"500"},{"errand":"House Assistance","charges":"7000"},{"errand":"Pick - Up","charges":"2500"}],"success":1,"message":" 0 records found"} of type org.json.JSONObject cannot be converted to JSONArray

**我正在尝试使用以下方法从我的wamp服务器获取json数组。 **

private void getData(){
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading");
        progressDialog.show();
        final 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);
                        Service service = new Service();
                        service.setName(jsonObject.getString("errand"));
                        service.setCharges(jsonObject.getInt("charges"));
                        serviceList.add(service);
                    } catch (JSONException e) {
                        e.printStackTrace();
                        progressDialog.dismiss();
                    }
                }
                adapter.notifyDataSetChanged();
                progressDialog.dismiss();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Volley",error.toString());
                progressDialog.dismiss();
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(jsonArrayRequest);

    }

1 个答案:

答案 0 :(得分:0)

如下所示进行更改,因为您正在获取JSONObject,并且其中包含名为&#34;数据&#34;的JSONArray。

JsonObjectRequest jsonObjRequest = new JsonObjectRequest
        (Request.Method.POST, url, jsonObj, new Response.Listener<JSONObject>()
        {
            @Override
            public void onResponse(JSONObject mResponse)
            {
      JSONArray response=mResponse.optJSONArray("data")

                 for (int i = 0; i < response.length(); i++) {
                   try {
                        JSONObject jsonObject = response.getJSONObject(i);
                        Service service = new Service();
                        service.setName(jsonObject.getString("errand"));
                        service.setCharges(jsonObject.getInt("charges"));
                        serviceList.add(service);
                    } catch (JSONException e) {
                        e.printStackTrace();

                    }
                }
                adapter.notifyDataSetChanged();
            }
        },
        new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
            }
        });

// Add the request to the RequestQueue.
queue.add(jsonObjRequest);