问题描述
- 使用volley进行post请求,参数中无故多出&
-
使用volley进行post请求,C#在接收到的时候参数中多了个&,源码如下:RequestQueue requestQueue = Volley.newRequestQueue(this); StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // 处理返回的JSON数据 Log.d("Response", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("Response", error.getMessage(), error); } }) { @Override protected Map<String, String> getParams() { // POST 参数 Map<String, String> params = new HashMap<String, String>(); params.put("action", action); // 本机号码 params.put("Mobile", getNativePhoneNumber()); params.put("Message", message); params.put("SendPhone", from); return params; }
C#接收到的参数在SendPhone的值后面却多了个“&”!
请问这是怎么回事呢?
解决方案
/**
* Converts params
into an application/x-www-form-urlencoded encoded string.
*/
private byte[] encodeParameters(Map params, String paramsEncoding) {
StringBuilder encodedParams = new StringBuilder();
try {
for (Map.Entry entry : params.entrySet()) {
encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding));
encodedParams.append('=');
encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding));
encodedParams.append('&');
}
return encodedParams.toString().getBytes(paramsEncoding);
} catch (UnsupportedEncodingException uee) {
throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee);
}
}
看最后Volley进行参数封装的时候 最后一个&字符没有去除