How to send a POST request with JSON body using Volley?

前端 未结 3 1919
余生分开走
余生分开走 2020-12-05 11:37

How to pass these parameter into POST method using Volley library.

API link: http://api.wego.com/flights/api/k/2/searches?api_key=12345&ts_code=123
Scre

3条回答
  •  执念已碎
    2020-12-05 12:17

    Usual way is to use a HashMap with Key-value pair as request parameters with Volley

    Similar to the below example, you need to customize for your specific requirement.

    Option 1:

    final String URL = "URL";
    // Post params to be sent to the server
    HashMap params = new HashMap();
    params.put("token", "token_value");
    params.put("login_id", "login_id_value");
    params.put("UN", "username");
    params.put("PW", "password");
    
    JsonObjectRequest request_json = new JsonObjectRequest(URL, new JSONObject(params),
           new Response.Listener() {
               @Override
               public void onResponse(JSONObject response) {
                   try {
                       //Process os success response
                   } catch (JSONException e) {
                       e.printStackTrace();
                   }
               }
           }, new Response.ErrorListener() {
               @Override
               public void onErrorResponse(VolleyError error) {
                   VolleyLog.e("Error: ", error.getMessage());
               }
           });
    
    // add the request object to the queue to be executed
    ApplicationController.getInstance().addToRequestQueue(request_json);
    

    NOTE: A HashMap can have custom objects as value

    Option 2:

    Directly using JSON in request body

    try {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        String URL = "http://...";
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("firstkey", "firstvalue");
        jsonBody.put("secondkey", "secondobject");
        final String mRequestBody = jsonBody.toString();
    
        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener() {
            @Override
            public void onResponse(String response) {
                Log.i("LOG_VOLLEY", response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("LOG_VOLLEY", error.toString());
            }
        }) {
            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }
    
            @Override
            public byte[] getBody() throws AuthFailureError {
                try {
                    return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
                } catch (UnsupportedEncodingException uee) {
                    VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                    return null;
                }
            }
    
            @Override
            protected Response parseNetworkResponse(NetworkResponse response) {
                String responseString = "";
                if (response != null) {
    
                    responseString = String.valueOf(response.statusCode);
    
                }
                return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
            }
        };
    
        requestQueue.add(stringRequest);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    

提交回复
热议问题