在 volley post 请求中发送表单数据

Posted

技术标签:

【中文标题】在 volley post 请求中发送表单数据【英文标题】:Sending form data in volley post request 【发布时间】:2019-02-25 00:34:48 【问题描述】:

邮递员的回应是这张图片:

这是我用来在发布请求中发送数据的代码。虽然我从中得到了 400 响应代码。

            StringRequest stringRequest = new StringRequest(Request.Method.POST,
                    API.ADD_PAYMENT,
                    new Response.Listener<String>() 
                        @Override
                        public void onResponse(String response) 
                            progressDialog.dismiss();
                            onBackPressed();
                        
                    ,
                    new Response.ErrorListener() 
                        @Override
                        public void onErrorResponse(VolleyError error) 
                            progressDialog.dismiss();
                            Toast.makeText(AddPaymentActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                        
                    )
                @Override
                protected Map<String, String> getParams() throws AuthFailureError 
                    Map<String, String> params = new HashMap<>();
                    params.put("amount", "123");
                    params.put("description", "Not Paid");
                    params.put("customer", "1");
                    return params;
                

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError 
                    Map<String, String> headers = new HashMap<>();
                    headers.put("Content-Type", "application/json; charset=UTF-8");
                    headers.put("Authorization", "token 0ee1248c5a84e8b1e36a8a15da48c0bb7580926c");
                    return headers;
                
            ;
            RequestQueue requestQueue = Volley.newRequestQueue(AddPaymentActivity.this);
            requestQueue.add(stringRequest);

【问题讨论】:

这是我自己的服务器,其余的 api 是在 django 上制作的。身份验证令牌正是我每次发出请求时都必须在标头中附加的内容。 是的,它必须是当前登录应用程序的用户的一种身份 不,我不需要那个。感谢您的帮助,但服务器端正在工作,因为邮递员的回复正常。只是截击造成了问题 只需删除 headers.put("Content-Type", "application/json; charset=UTF-8"); 并尝试在 Volley 请求中。 【参考方案1】:

首先,当您使用application/json 作为与服务器的对话语言时,为什么不使用JsonObjectRequest 而不是StringRequest?其次,您是否尝试过将参数传递给其他请求构造函数,如下所示?

Map<String, Object> params = new HashMap<>();
params.put("amount", 123);
params.put("description", "Not Paid");
params.put("customer", 1);
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.POST, API.ADD_PAYMENT, new JSONObject(params), new Response.Listener<JSONObject>() 
...

传递您的标头是必不可少的,因此您的其余代码保持原样。

【讨论】:

以上是关于在 volley post 请求中发送表单数据的主要内容,如果未能解决你的问题,请参考以下文章

Android Volley 如何使用 volley 在 POST 请求中发送用户名和密码以及其他参数

volley 发送post请求

在 json 对象参数 Volley post 中发送令牌头

Volley 使用 StringRequest 在第一次后不调用 getParams 发送 POST 请求参数

kotlin volley android POST 多部分/表单数据

如何在 Swift 3 的 POST 请求中发送表单数据