Post Method using Volley not working

前端 未结 5 1025
天命终不由人
天命终不由人 2020-12-06 19:32

Hi i am using Volley for my login page. I need to pass data like this manner

{
userID : \'-988682425884628921\',
email :\'aditya@vyas.com\',
pas         


        
相关标签:
5条回答
  • 2020-12-06 20:05

    Solved your problem. Just used JsonArrayRequest and passed parameters in JsonObject form:

        Map<String, String> params = new HashMap<String, String>();
        params.put("userID", "userid");
        params.put("email","email");
        params.put("passwd", "password");
        JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, "url", new JSONObject(params),
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        System.out.println("response -->> " + response.toString());
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        System.out.println("change Pass response -->> " + error.toString());
                    }
                });
    
        request.setRetryPolicy(new
    
                DefaultRetryPolicy(60000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    
    
        Volley.newRequestQueue(activity).add(request);
    

    No need of overriding getParams() or getHeaders().

    Problem : 1 You were getting response code 500 because the server was accepting the params as JsonObject and we are trying to feed String.

    Problem : 2 You were using JsonObjectRequet but the response from the server was in JsonArray so you need to use JsonArrayRequest to accept the response in JsonArray

    Try and let me know this helps or not :)

    0 讨论(0)
  • 2020-12-06 20:06

    Beware of content-type header. Volley handles it differently from other headers and it's not shown in Map<> Headers. Instead of overriding getHeaders() method to set content-type, you should override getBodyContentType() like this:

    @Override
    public String getBodyContentType()
    {
        return "application/json; charset=utf-8";
    }
    
    0 讨论(0)
  • 2020-12-06 20:28

    I had a similar problem. I had overwritten the Content-Type in the getHeaders Method:

    headers.put("Content-Type", "application/json; charset=UTF-8");

    but Volley itself added a Content-Type parameter, so there were two of those parameters. Delete the line had solved my Problem.

    0 讨论(0)
  • 2020-12-06 20:28

    You need to override protected Map<String, String> getParams() to pass parameters in POST.

     JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
                url, params,
                new Response.Listener<JSONObject>() {
    
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("Login Response", response.toString());
    
    
                       hidepDialog();
                    }
                }, new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
    
                System.out.println(error.getStackTrace());
                VolleyLog.d("ErrorVolley", "Error: " + error.getStackTrace());
                hidepDialog();
            }
        }) {
    
                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("userID", "2"));
                    params.put("email","aa@a.kl");
                    params.put("passwd", "ffffffffd");
    
                    return params;
                }
            };

    0 讨论(0)
  • 2020-12-06 20:31

    i have same problem use this :

            StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
    
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
    
                    }
                }) {
    
            @Override
            public Map<String, String> getParams()  {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
                headers.put("UN", UserName);
                headers.put("PW", PassWord);
                return headers;
    
    
            }
    
        };
    
        RequestQueue requestQueue = Volley.newRequestQueue(this);
         requestQueue.add(stringRequest);
    

    Just need to add headers.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); to parms

    good luck.

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