You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:42:51