Android StringEntity() 和 UrlEncodedFormEntity() 的区别
时间:2022-04-25
本文章向大家介绍Android StringEntity() 和 UrlEncodedFormEntity() 的区别,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天在做安卓客户端向服务器提交数据的过程中,在组织POST数据时,用了UrlEncodedFormEntity()这个方法,但是后台报错,说是无法解析json内容。
按照本来的想法,向后台发送的是 json 格式的内容,里面有参数和值,供后台程序处理,形式如下“:
{"content":"鍛樺伐涓氬姟姘村钩涓嶈冻","townId":"14","companyId":"8","date":"2014-12-27","supervisor":"鑻忚礊鏄?,"userId":0}
但是,用UrlEncodedFormEntity()方法组织的数据发送到服务器却是如下形式:
companyId=8&townId=14&date=2014-12-27&supervisor=%E8%B0%A2%E9%95%BF%E5%BB%B7&content=%E5%91%98%E5%B7%A5%E4%B8%9A%E5%8A%A1%E6%B0%B4%E5%B9%B3%E6%9C%89%E5%BE%85%E6%8F%90%E9%AB%98&userId=0
很显然,是普通的键值对,不是json,所以后台无法接受。
后来改用 StringEntity()方法组织数据,数据的形式就非常自由了,可以组织成自己想要的任何形式,问题解决。
下面来比较一下两种方法的使用:
1. UrlEncodedFormEntity()
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
NameValuePair pair1 = new BasicNameValuePair("supervisor", supervisorEt.getEditableText().toString());
NameValuePair pair2 = new BasicNameValuePair("content", superviseContentEt.getEditableText().toString());
NameValuePair pair3 = new BasicNameValuePair("userId", String.valueOf(signedUser.getId()));
pairs.add(pair1);
pairs.add(pair2);
pairs.add(pair3);
httpPost.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8))
2. StringEntity()
JSONObject postData = new JSONObject();
postData.put("supervisor", supervisorEt.getEditableText().toString());
postData.put("content", superviseContentEt.getEditableText().toString());
postData.put("userId", signedUser.getId());
httpPost.setEntity(new StringEntity(postData.toString(), HTTP.UTF_8));
可以看出,UrlEncodedFormEntity()的形式比较单一,只能是普通的键值对,局限性相对较大。
而StringEntity()的形式比较自由,只要是字符串放进去,不论格式都可以
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python3 正则表达式特殊符号及用法.md
- Web网页响应式布局.md
- BootStrap应用开发学习入门1
- Python实现单链表和字典
- 关于如何做好运维管理工作的一点思考
- 2.6-Air302(NB-IOT)-基础外设-AD采集,NTC温度传感器B3950
- 2.5-Air302(NB-IOT)-基础外设-串口(485,422),CRC校验
- 2.3-Air302(NB-IOT)-基础外设-输入检测
- 2.2-Air302(NB-IOT)-基础外设-PWM输出
- API可视化管理平台YApi
- BootStrap应用开发学习入门
- 为什么要学习现代控制理论(机器人方向)?
- 2.XML之编程解析示例笔记
- XML快速入门学习笔记
- Fuzz入门以及在渗透测试中重要性