Volley Post JsonObjectRequest 在使用 getHeader 和 getParams 时忽略参数
Posted
技术标签:
【中文标题】Volley Post JsonObjectRequest 在使用 getHeader 和 getParams 时忽略参数【英文标题】:Volley Post JsonObjectRequest ignoring parameters while using getHeader and getParams 【发布时间】:2014-08-25 14:14:04 【问题描述】:我正在尝试连接 API url="api adress",它接受两种标头类型 application/json 以响应 json 和 application/xml 以响应 xml。我需要用 json 参数打 JSON,响应也将是 json 格式。使用带有 JsonObjectRequest 设置标头的 android volley Post 请求使用 getHeaders 连接到服务器,但 getParams 设置参数不起作用。
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
Constants.BASE_URL + Constants.LOGIN, null, response,
response_error)
/**
* Passing some request headers
* */
@Override
public Map<String, String> getHeaders() throws AuthFailureError
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
@Override
protected Map<String, String> getPostParams()
throws AuthFailureError
// TODO Auto-generated method stub
Map<String, String> params = new HashMap<String, String>();
params.put("key", "value");
return params;
;
// implementation of listeners
Response.Listener<JSONObject> response = new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
Log.d(TAG, response.toString());
Log.e("responce", response.toString());
// msgResponse.setText(response.toString());
hideProgressDialog();
;
Response.ErrorListener response_error = new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.e("error responce", error.getMessage());
VolleyLog.d(TAG, "Error: " + error.getMessage());
hideProgressDialog();
;
//get params never get called
//i also tried alternative to send params but does not works.
Map<String, String> params = new HashMap<String, String>();
params.put("key", "value");
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
Constants.BASE_URL + Constants.LOGIN, new JSONObject(params), response,
response_error)
/**
* Passing some request headers
* */
@Override
public Map<String, String> getHeaders() throws AuthFailureError
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
return headers;
;
any type of help will be appretiated, Thanks in advance.
【问题讨论】:
【参考方案1】:Volley 会忽略你的Content-Type
设置,如果你想修改内容类型,你可以覆盖getBodyContentType
方法:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, url,
new JSONObject(params), response, response_error)
@Override
public String getBodyContentType()
return "application/json; charset=utf-8";
为什么凌空忽略你的参数?看看我的另一个answer。
【讨论】:
【参考方案2】:Volley JsonObjectRequest Post request not working
从该帖子中获取另一个答案,开头是:您可以创建自定义 JSONObjectReuqest
【讨论】:
以上是关于Volley Post JsonObjectRequest 在使用 getHeader 和 getParams 时忽略参数的主要内容,如果未能解决你的问题,请参考以下文章
Android Volley 如何使用 volley 在 POST 请求中发送用户名和密码以及其他参数
(Volley) Post 方法后如何处理返回的 JsonObject
Volley - BasicNetwork.performRequest:意外响应代码 400 POST
使用 Volley 库未从 Android 收到 PHP POST