1

Hi I am using volley as JSON Parsing. I am using POST method and sending parameters in post request. I am getting following error when parsing the data, I am getting following error. I want to use volley. I have tried with JsonArrayRequest but it does not allow to send parameters as JSONObject,which I am using in my code.

org.json.JSONArray cannot be converted to JSONObject

Request is like

{
    "city":"acd",
    "user_id":"82",
    "phone_number1":"1232131231",
    "my_type":"asf"
}

Response is like

[{
   "name":"dfdfd",
}]

Following is my code

 private void Search_Refer() {

        //initialize the progress dialog and show it
        progressDialog = new ProgressDialog(SearchReferNameActivity.this);
        progressDialog.setMessage("Please wait....");
        progressDialog.show();
        try {


            JSONObject jsonBody = new JSONObject();
            jsonBody.put("city", "acb");
            jsonBody.put("user_id", "82");
            jsonBody.put("phone_number1", "12332123231");
            jsonBody.put("my_type", "asf");

            JsonObjectRequest jsonOblect = new JsonObjectRequest(Request.Method.POST, Constants.BASE_URL1+"api/lab/search", jsonBody, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {


                    Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_LONG).show();
                    Log.e("Search EROOR", response.toString());



                    try {

                        JSONArray itemArray=new JSONArray(response);
                        dataModelArrayList = new ArrayList<>();
                        for (int i = 0; i < itemArray.length(); i++) {

                            SearchModel playerModel = new SearchModel();
                            JSONObject dataobj = itemArray.getJSONObject(i);

                            //playerModel.setProduct_name(dataobj.getString("name"));
                            playerModel.setRadiology_store_first_name(dataobj.getString("radiology_store_first_name"));


                            dataModelArrayList.add(playerModel);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }


                    progressDialog.dismiss();
                   /* Intent intent = new Intent(SearchReferNameActivity.this, SearchResult.class);
                    intent.putExtra("Search_result", dataModelArrayList);
                    startActivity(intent);*/

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                     Toast.makeText(getApplicationContext(), "Response:  " + error.toString(), Toast.LENGTH_SHORT).show();
                    System.out.println("Search Eroor"+error.toString());
                    progressDialog.dismiss();

                }
            }){
                @Override
                public String getBodyContentType() {
                    return "application/json";
                }

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    headers.put("Authorization", "Bearer "+deviceToken);
                    return headers;
                }
            };

            jsonOblect.setRetryPolicy(new DefaultRetryPolicy(
                    10000,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            MyApplication.getInstance().addToRequestQueue(jsonOblect,"postrequest");

        } catch (JSONException e) {
            e.printStackTrace();
        }
        // Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();

    }
Cedan Misquith
  • 1,134
  • 9
  • 20

3 Answers3

0

Use JsonArrayRequest or StringRequest in place of JsonObjectRequest

JsonArrayRequest

Kailash Chouhan
  • 2,328
  • 16
  • 16
  • I tried , now tell me how will you send parameters in Jsonobject? – New Bee Andy Aug 13 '19 at 07:24
  • Use getParams method @Override protected Map getParams() throws AuthFailureError { Map params=new HashMap<>(); params.put("city","abcd); params.put("user_id","82"); params.put("phone_number1","01235467895"); params.put("my_type","asf"); return params; } – Kailash Chouhan Aug 13 '19 at 07:27
0

change the following response parameter to JSONArray

Instead of new Response.Listener<JSONObject> Use new Response.Listener<JSONArray>

// JSONArray insated of JSONObject
 public void onResponse(JSONArray response) {
}
Ganesh Gudghe
  • 1,327
  • 1
  • 17
  • 41
0

Use Below code

 StringRequest stringRequest = new StringRequest(Request.Method.POST, "api/lab/search", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("city", "abcd");
                params.put("user_id", "82");
                params.put("phone_number1", "01235467895");
                params.put("my_type", "asf");
                return params;
            }
        };
Kailash Chouhan
  • 2,328
  • 16
  • 16