Android Studio中键值对参数传递及POST请求解析
Android中NameValuePair参数传递与POST请求解析
1. 如何用NameValuePair传递参数?
流程其实很直观,我给你拆解成几步:
- 首先创建
ArrayList<NameValuePair>集合,用BasicNameValuePair封装每一组键值对(key和value),把需要传递的参数逐个加进去,就像你代码里写的那样:ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("pin", "date")); - 接下来把这个集合转换成
UrlEncodedFormEntity——这个类会自动帮你把键值对编码成符合HTTP表单提交的格式(默认是application/x-www-form-urlencoded类型),注意要处理编码异常; - 把这个Entity设置到
HttpPost对象中,再通过HttpClient执行请求,就完成参数传递了。
敲黑板:网络请求一定要放在子线程执行,不能在主线程跑,否则会抛出
NetworkOnMainThreadException,这是Android的主线程网络限制。
2. 代码对应的POST请求详情
先给你最直接的结论:参数不会出现在URL里,而是放在请求体(Request Body)中。具体细节如下:
- 请求的目标URL还是
http://X.X.X.X/abcdef.php,URL本身不会拼接任何参数; - 请求头里会包含
Content-Type: application/x-www-form-urlencoded,用来告诉服务器这是表单编码的参数; - 请求体的内容是经过URL编码的键值对,这里就是
pin=date(如果参数里有特殊字符,比如空格、中文,会自动转成%20、%E4%B8%AD%E6%96%87这类编码格式); - 对比一下:如果是
HttpGet请求,参数才会拼在URL后面,变成http://X.X.X.X/abcdef.php?pin=date,但POST请求的参数是隐藏在请求体里的,只有通过抓包工具或者服务器日志才能看到。
另外补个小提示:现在Android官方已经废弃了HttpClient和NameValuePair这些API,新项目更推荐用HttpURLConnection或者OkHttp这类现代网络库,它们的API更简洁,性能和兼容性也更好哦~
内容的提问来源于stack exchange,提问作者Jerome.T
相关产品推荐
相关产品推荐

