Cannot convert JSONArray to JSONObject using Volley

12,023

The response that you get is a JSONArray not a JSONObject

public void onResponse(JSONObject response)// resposne should be JSONArray
// Change it to JSONArray

This

JSONObject value = response.getJSONObject("label"); // wrong
// label is a json array

Your json

[ // json array node 
    { // json object node 
        "label": [ // json array label
            {
                "pers_nom": "yen",
                "pers_id": "1",
                "pers_prenom": "ines",
                "pers_email": "[email protected]",
                "pers_phone": "443456784"
            },
            {
                "pers_nom": "Jamin",
                "pers_id": "2",
                "pers_prenom": " Derkok",
                "pers_email": "[email protected]",
                "pers_phone": "2345512398"
            }
        ]
    }
]

Should be something like

 @Override
 public void onResponse(JSONArray response) {
 Log.i(TAG,response.toString());
 try{
  JSONObject value = response.getJSONObject(0);
  JSONArray jr = value.getJSONArray("label");
  for(int i=0;i<jr.length();i++)
  {
  JSONObject jb = (JSONObject) jr.get(i);
  String pers_nom = jb.getString("pers_nom"); 
  Log.i(".........",pers_nom);
  ...// similarly for id and so on..  
  }
  ...// rest of the code

Edit:

 Response.Listener<JSONArray> listener = new Response.Listener<JSONArray>()
        {

            @Override
            public void onResponse(JSONArray response) {
                // TODO Auto-generated method stub

            }

        };
        Response.ErrorListener errorListener = new Response.ErrorListener()
        {

            @Override
            public void onErrorResponse(VolleyError error) {
                // TODO Auto-generated method stub

            }

        };

And use

    JsonArrayRequest  jr =new JsonArrayRequest(Request.Method.GET,url, listener, errorListener) ;

Edit 2:

I check the source and it looks like below

 public JsonArrayRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener) {
            super(Method.GET, url, null, listener, errorListener);

        }
Share:
12,023
Inès Belhouchet
Author by

Inès Belhouchet

A human being who likes to code.

Updated on June 05, 2022

Comments

  • Inès Belhouchet
    Inès Belhouchet almost 2 years

    I'm trying to use Volley for consuming a web service. This is my logcat output:

    12-14 10:45:41.750: I/Annuaire2error(4005): org.json.JSONException: Value [{"label":[{"pers_nom":"yen","pers_id":"1","pers_prenom":"ines","pers_email":"[email protected]","pers_phone":"443456784"},{"pers_nom":"Jamin","pers_id":"2","pers_prenom":" Derkok","pers_email":"[email protected]","pers_phone":"2345512398"}]}] of type org.json.JSONArray cannot be converted to JSONObject

    it seems that it can't access the value of label of my web service. How can I convert from JSONArray to JSONObject?

    This is my code:

    mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
    
    JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.i(TAG,response.toString());
            try{
                JSONObject value = response.getJSONObject("label");
                String essai = value.getString("pers_nom");
                /**
                 * just for check 
                 * */
                Toast.makeText(getActivity(), ""+essai, Toast.LENGTH_SHORT).show();
                Log.d("volley output", essai);
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity(), "errrrroooor", Toast.LENGTH_LONG).show(); 
            Log.i(TAG+"error",error.getMessage());
        }
    });
    
    mRequestQueue.add(jr);