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()的形式比较自由,只要是字符串放进去,不论格式都可以

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏偏前端工程师的驿站

JS魔法堂:jQuery.Deferred(jQuery1.5-2.1)源码剖析

一、前言                              jQuery.Deferred作为1.5的新特性出现在jQuery上,而jQuery.aja...

27790
来自专栏飞扬的花生

js笔记

1.克隆对象 克隆数组: var country=['中国','美国']; var copyCountry=country.slice(0); 克隆对象: va...

24760
来自专栏电光石火

ajax同步异步返回值

$.temp = function () { $.ajax({ url : SERVERURL + "Info", type : 'post', ...

37590
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch 动态映射——自动检测

ES中有一个非常重要的特性——动态映射,即索引文档前不需要创建索引、类型等信息,在索引的同时会自动完成索引、类型、映射的创建。 那么什么是映射呢?映射就是描...

20350
来自专栏飞扬的花生

Json字符串和Json对象的简单总结

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机...

24560
来自专栏飞扬的花生

JQuery常用方法总结

1.json的创建方式 <script> $(function () { //第一种 var my = new Peop...

25470
来自专栏xingoo, 一个梦想做发明家的程序员

JQuery ztree 异步加载实践

本来要做一个文件目录浏览界面,需要遍历所有的文件和目录,很显然一次性读取时很费时费力的一件事情。 因此就需要做异步加载.... 不过网上的几篇帖子还挺坑的...

37170

检测OpenWhisk Web Actions

我已经写了一篇文章,它是关于OpenWhisk Web actions,以及他们是如何让你通过向客户端发送一个状态码和HTTP头后,在main()方法中得到一个...

19350
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch——Rest API中的常用用法

本篇翻译的是Elasticsearch官方文档中的一些技巧,是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api。 返回数...

23170
来自专栏xingoo, 一个梦想做发明家的程序员

Logstash为什么那么慢?—— json序列化

今天跟峡谷金桥聊天,询问起Logstash的性能,金桥提示说Logstash中json的序列化是浪费性能的一方面。于是便有了下面的测试: 第一步,造数据 ...

26090

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励