How to send json array as post request in volley?

后端 未结 6 1414
孤城傲影
孤城傲影 2021-01-04 08:56

I am using volley for json parsing. I want to send some data using POST to server side. I am trying to send .Now can any one tell me that how can i send filter array to serv

相关标签:
6条回答
  • 2021-01-04 09:38
    {
    "typeName": "MANUFACTURER",
    "typeId": 22,
    "cityId": 308,
    "sortBy": "productname",
    "sortOrder": "desc",
    "filter":[
                {
                    "filterId":101,
                    "typeName":"CAT_ID",
                 }
                 {
                     "filterId":102,
                    "typeName":"CAT_ID"
                }
             ]
    }
    
    
    JSONObject object=new JSONObject();
    object.put("typeName","");
    object.put("typeId","");
    object.put("cityId","");
    object.put("sortBy","");
    object.put("sortOrder","");
    JSONArray array=new JSONArray();
    JSONObject obj=new JSONObject();
    obj.put("filterId","");
    obj.put("typeName","");
    array.put(obj);
    object.put("filter",obj.toString());
    

    pass JSONObject to make request. use this https://www.androidhive.info/2014/09/android-json-parsing-using-volley/

    0 讨论(0)
  • 2021-01-04 09:38

    Hope this helps you.

        //Create Main jSon object
        JSONObject jsonParams = new JSONObject();
    
        try {
            //Add string params
            jsonParams.put("typeName", "MANUFACTURER");
            jsonParams.put("typeId", "22");
            jsonParams.put("cityId", "308");
            jsonParams.put("sortBy", "productname");
            jsonParams.put("sortOrder", "desc");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        //Create json array for filter
        JSONArray array=new JSONArray();
    
        //Create json objects for two filter Ids
        JSONObject jsonParam1 =new JSONObject();
        JSONObject jsonParam2 =new JSONObject();
    
        try {
    
            jsonParam1.put("filterId","101");
            jsonParam1.put("typeName","CAT_ID");
    
            jsonParam2.put("filterId","102");
            jsonParam2.put("typeName","CAT_ID");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
        //Add the filter Id object to array
        array.put(jsonParam1);
        array.put(jsonParam2);
    
        //Add array to main json object
        try {
            jsonParams.put("filter",array);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    

    For more information on how to create json object check this link

    Android JSONObject : add Array to the put method

    EDIT:

    In case of more data it is better to use Gson convertor

    http://www.vogella.com/tutorials/JavaLibrary-Gson/article.html

    Also for creating pojo classes use this

    http://www.jsonschema2pojo.org/

    0 讨论(0)
  • 2021-01-04 09:39

    I used below code to post JSONArray to volley. You have to use JsonArrayRequest and pass the JSON Array directly without adding it to any JSONObject. Also keep in mind to Override the "parseNetworkResponse" method to convert the response to JSONArray again as The ResponseListner for JsonArrayRequest expects a type of JSONArray

        String URL = "www.myposturl.com/data";
    
        RequestQueue queue = Volley.newRequestQueue(this);
    
        //Create json array for filter
        JSONArray array = new JSONArray();
    
        //Create json objects for two filter Ids
        JSONObject jsonParam = new JSONObject();
        JSONObject jsonParam1 = new JSONObject();
    
        try {
            //Add string params
            jsonParam.put("NAME", "XXXXXXXXXXXXXX");
            jsonParam.put("USERNAME", "XXXXXXXXXXXXXX");
            jsonParam.put("PASSWORD", "XXXXXXXXXXXX");
            jsonParam1.put("NAME", "XXXXXXXXXXXXXX");
            jsonParam1.put("USERNAME", "XXXXXXXXXXXXXX");
            jsonParam1.put("PASSWORD", "XXXXXXXXXXXX");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
        array.put(jsonParam);
        array.put(jsonParam1);
        JsonArrayRequest request_json = new JsonArrayRequest(Request.Method.POST, URL, array,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        //Get Final response
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                VolleyLog.e("Error: ", volleyError.getMessage());
    
            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<String, String>();
                // Add headers
                return headers;
            }
            //Important part to convert response to JSON Array Again
            @Override
            protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
                String responseString;
                JSONArray array = new JSONArray();
                if (response != null) {
    
                    try {
                        responseString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                        JSONObject obj = new JSONObject(responseString);
                        (array).put(obj);
                    } catch (Exception ex) {
                    }
                }
                //return array;
                return Response.success(array, HttpHeaderParser.parseCacheHeaders(response));
            }
        };
        queue.add(request_json);
    
    0 讨论(0)
  • 2021-01-04 09:46

    Hi Volley does not support JsonArray request better use some other libraries...

    0 讨论(0)
  • 2021-01-04 09:53

    Following three steps should make it work for old Volley libraries lacking this suport.

    1. Prepare payload and post:

                          JSONArray payloadItems = new JSONArray();
      
                    JSONObject payloadItem1=new JSONObject();
                   //set properties on item1
                   payloadItem1.put('prop1',"val11");
      
                    payloadItems.put(payloadItem1);
      
                   JSONObject payloadItem2=new JSONObject();
                   //set properties on item1
                   payloadItem2.put('prop1',"val12");
      
                   payloadItems.put(payloadItem1);
      
      
                   JsonArrayRequest request;
      
                   request = new JsonArrayRequest(Request.Method.POST,url,payloadItems, new Response.Listener<JSONArray>() {
                      @SuppressWarnings("unchecked")
                      @Override
                      public void onResponse(JSONArray response) {
                          //your logic to handle response
                      }
                  }, new Response.ErrorListener() {
                      @Override
                      public void onErrorResponse(VolleyError error) {
                          //your logic to handle error
                      }
                  }) {
      
                      public Map<String, String> getHeaders() throws AuthFailureError {
                          Map<String,String> params = new HashMap<String, String>();
                          /* This is very important to pass along */
                          params.put("Content-Type","application/json");
                          //other headers if any
                          return params;
                      }
      
                       };
      
      
      
      
                      request.setRetryPolicy(new DefaultRetryPolicy(10000, 2, 2));
                      VolleyHelper.init(this);
                      VolleyHelper.getRequestQueue().add(request);
      
    2. [If Needed] Add this constructor in Class- JsonArrayRequest in Volley package if not already there

        public JsonArrayRequest(int method, String url, JSONArray jsonArray, Listener<JSONArray> listener, ErrorListener errorListener) {
          super(method, url, (jsonArray == null) ? null : jsonArray.toString(),
                  listener, errorListener);
      

      }

    3. [If Needed] Override this method if not yet implemented to support JSONArray response from server.

       @Override
       protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
           String responseString;
           JSONArray array = new JSONArray();
           if (response != null) {
      
               try {
                   responseString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                   JSONObject obj = new JSONObject(responseString);
                   (array).put(obj);
               } catch (Exception ex) {
               }
           }
           //return array;
           return Response.success(array, HttpHeaderParser.parseCacheHeaders(response));
       }
      
    0 讨论(0)
  • 2021-01-04 09:56

    If you are having a problem in calling the API then this will help you.

    RequestQueue queue = Volley.newRequestQueue(this);
    JsonObjectRequest jobReq = new JsonObjectRequest(Request.Method.POST, url, jObject,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject jsonObject) {
    
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
    
                }
            });
    
    queue.add(jobReq);
    

    where jObject is the JSON data you want to send to the server.

    Implementation will be similar for JSONArray. Instead of JsonObjectRequest use JsonArrayRequest and send jArray instead of jObject.

    For creating json array just do a little tweak

    JSONArray array=new JSONArray();
    
    for(int i=0;i<filter_items.size();i++){
        JSONObject obj=new JSONObject();
        try {
            obj.put("filterId",filter_items.get(i));
            obj.put("typeName","CAT_ID");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        array.put(obj);
    }
    

    And finally add json array as below

    jsonParams.put("filter",array);
    

    In your case you are converting Json array to string

    0 讨论(0)
提交回复
热议问题