在 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 请求中发送用户名和密码以及其他参数
在 json 对象参数 Volley post 中发送令牌头
Volley 使用 StringRequest 在第一次后不调用 getParams 发送 POST 请求参数