Search code examples
androidjsonandroid-volleyjsonobjectrequest

How to post request parameters when using JsonArrayRequest in Volley


I am newbie to Json parsing. I am trying to read a json data using JsonArrayRequest but I am little confused in sending parameters and use POST method.In case of JsonObjectRequest i can send the method type,url,params but In JsonArrayRequest how to send params like username and password and use POST method.please help me out.here is the code i have written.

final JsonArrayRequest jsonObjReq = new JsonArrayRequest(MySingleton.getInstance().getDOWNLOAD_SERVICES_URL(), new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        try {
            if(response==null) {
                pDialog.hide();
            }
            for (int i = 0; i < response.length(); i++) {
                jresponse = response.getJSONObject(i);
            }
            //String service_response = response.getString("SvcTypeDsc");
            Toast.makeText(getActivity().getApplicationContext(), "services" + jresponse, Toast.LENGTH_SHORT).show();
        } catch (JSONException e) {
            e.printStackTrace();
            Log.d("soservices", "sos" + e.getMessage());
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        VolleyLog.d("Login request", "Error: " + error.getMessage());
        Log.d("Volley Error:", "Volley Error:" + error.getMessage());
        Toast.makeText(getActivity(), "Unable to connect to server, try again later", Toast.LENGTH_LONG).show();
        pDialog.hide();
    }
}) {
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
        params.put("uniquesessiontokenid","39676161-b890-4d10-8c96-7aa3d9724119");
        params.put("loginname", userDet.getSAID());
        params.put("password", "23295");
        return super.getParams();
     }

     @Override
     public int getMethod() {
         try {
             getParams();
         } catch (AuthFailureError authFailureError) {
             authFailureError.printStackTrace();
         }
             return super.getMethod();
         }
     };

     AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

}

my json data is like:

{
    "username":"rushi",
    "firstname": "abc",
},
{
    "username": "xyz",
    "firstname": "vxa",
},

The params are not being sent. Please help me solving this. Thank you in advance.


Solution

  • This solved my problem to pass params when JsonArrayRequest and POST method is used.

    Volley.newRequestQueue(getActivity())
        .add(new JsonRequest<JSONArray>(Request.Method.POST,
        MySingleton.getInstance().getDOWNLOAD_SERVICES_URL(),
        jsonobj.toString(),
        new Response.Listener<JSONArray>() {
              @Override
              public void onResponse(JSONArray jsonArray) {
                  Log.d("response", "res-rec is" + jsonArray);
                  if (jsonArray == null) {
                      pDialog.dismiss();
                      Snackbar.make(myview, "No services found", Snackbar.LENGTH_LONG).show();
    
                  } else {
    
    
                      for (int i = 0; i < jsonArray.length(); i++) {
                          try {
    
                              pDialog.dismiss();
                              JSONObject jsonObject = jsonArray.getJSONObject(i);
                              String desc = jsonObject.getString("SvcTypeDsc");
                              String image_url = jsonObject.getString("ThumbnailUrl");
                              // al_ImageUrls.add(image_url);
    
                              al_list_of_services.add(desc);
                              ad_servicesadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, al_list_of_services);
    
                              lv_webservicesList.setAdapter(ad_servicesadapter);
    
                              Log.d("imageurls", "imagesurl " + image_url);
                              Log.d("services-list", "list is " + desc + " " + i);
                          } catch (JSONException e) {
                              e.printStackTrace();
                          }
    
                      }
                  }
              }
          }, new Response.ErrorListener() {
              @Override
              public void onErrorResponse(VolleyError volleyError) {
                  VolleyLog.d("Login request", "Error: " + volleyError.getMessage());
                  Log.d("Volley Error:", "Volley Error:" + volleyError.getMessage());
                  Toast.makeText(getActivity(), "Unable to connect to server, try again later", Toast.LENGTH_LONG).show();
                  pDialog.dismiss();
              }
          })
    
          {
              @Override
              protected Map<String, String> getParams() throws AuthFailureError {
    
    
                  Map<String, String> params = new HashMap<String, String>();
                  // params.put("uniquesessiontokenid", "39676161-b890-4d10-8c96-7aa3d9724119");
                  params.put("uniquesessiontokenid", userDet.getSessionToken());
                  params.put("said", userDet.getSAID());
                  params.put("SOId", "23295");
    
                  return super.getParams();
              }
    
              @Override
              protected Response<JSONArray> parseNetworkResponse(NetworkResponse networkResponse) {
    
    
                  try {
                      String jsonString = new String(networkResponse.data,
                              HttpHeaderParser
                                      .parseCharset(networkResponse.headers));
                      return Response.success(new JSONArray(jsonString),
                              HttpHeaderParser
                                      .parseCacheHeaders(networkResponse));
                  } catch (UnsupportedEncodingException e) {
                      return Response.error(new ParseError(e));
                  } catch (JSONException je) {
                      return Response.error(new ParseError(je));
                  }
    
                  //  return null;
              }
          }
    );