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() 

[java] view
plain
copy

  1. List<NameValuePair> pairs = new ArrayList<NameValuePair>();  
  2.   
  3. NameValuePair pair1 = new BasicNameValuePair("supervisor", supervisorEt.getEditableText().toString());  
  4. NameValuePair pair2 = new BasicNameValuePair("content", superviseContentEt.getEditableText().toString());  
  5. NameValuePair pair3 = new BasicNameValuePair("userId", String.valueOf(signedUser.getId()));  
  6.                   
  7. pairs.add(pair1);  
  8. pairs.add(pair2);  
  9. pairs.add(pair3);  
  10.                   
  11. httpPost.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8))  

2. StringEntity()

[java] view
plain
copy

  1. JSONObject postData = new JSONObject();  
  2.                   
  3. postData.put("supervisor", supervisorEt.getEditableText().toString());  
  4. postData.put("content", superviseContentEt.getEditableText().toString());  
  5. postData.put("userId", signedUser.getId());  
  6.                   
  7. httpPost.setEntity(new StringEntity(postData.toString(), HTTP.UTF_8));  

可以看出,UrlEncodedFormEntity()的形式比较单一,只能是普通的键值对,局限性相对较大。

而StringEntity()的形式比较自由,只要是字符串放进去,不论格式都可以

时间: 2024-09-17 03:09:50

Android StringEntity() 和 UrlEncodedFormEntity() 的区别的相关文章

android title和actionbar的区别

问题描述 android title和actionbar的区别 初学android,我想在一个页面的顶端放入两个按钮,应该用title还是actionbar.他们两个什么区别?分别该什么时候用? 解决方案 android title 是UI上的一小部分,它支持Text和Color,你可以在上面设置文本信息作为title,还可以设置背景颜色,不过这些大部分在android2.0的app上应用. action bar则是现在android app应用中主要的导航控件,它上面可以包含一些按钮和导航信息

Android getJSONObject与optJSONObject的区别结合源码分析

Android getJSONObject与optJSONObject的区别结合源码分析 json解析常见问题: getJSONObject与optJSONObject的区别,下面结合源码和案例来分析当我们使用这两周方法来解析数据时,哪种比较好. 源码分析: //使用getJSONObject时,如果返回的对象不是JSONObject,抛出JSONException异常 /** * Returns the value mapped by {@code name} if it exists and

Android 中clipToPadding 和 clipChildren区别和作用

Android 中clipToPadding 和 clipChildren区别和作用 Android 关于 clipToPadding 和 clipChildren区别和作用对于这两个属性那也是很神奇, 1.对于clipToPadding 默认是true, 这个属性一般都是viewgrounp对象才会用到, 他的意思就是 对于padding 所占的尺寸大小也绘制 其他的item的view, 2.对于clipChildren 默认是true,这个属性是让子view不受父view大小的限制,可以超过

Android ImageView Src 和Background 区别_Android

之前使用Glide的时候被ImageView的图片设置弄混了(很低级的问题,确是经常犯的问题),所以就去看了一下ImageView,补补基础. 首先ImageView有两个显示图片的属性,分别是src和background.从名字上看可以知道第一个是资源(画),第二个是背景(画框). 如何设置这两个值呢? //background mImageView.setBackground(); mImageView.setBackgroundResource(); mImageView.setBackg

android sdk 各个版本的区别

Android1.1 2008 年9月发布的Android第一版 Android1.5  Cupcake (纸杯蛋糕) 2009年4月30日,官方1.5版本(Cupcake 纸杯蛋糕)的Android发布.主要的更新如下: 1.拍摄/播放影片,并支持上传到Youtube  2.支持立体声蓝牙耳机,同时改善自动配对性能  3.最新的采用WebKit技术的浏览器,支持复制/贴上和页面中搜索  4.GPS性能大大提高  5.提供屏幕虚拟键盘  6.主屏幕增加音乐播放器和相框widgets  7.应用程

深入剖析Android中Service和Thread区别_Android

Service既不是进程也不是线程,它们之间的关系如下: 可以看到,它们的线程id完全是一样的,由此证实了Service确实是运行在主线程里的,也就是说如果你在Service里编写了非常耗时的代码,程序必定会出现ANR的. 你可能会惊呼,这不是坑爹么!?那我要Service又有何用呢?其实大家不要把后台和子线程联系在一起就行了,这是两个完全不同的概念.Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比

android中permission_group与permisson区别、作用

http://blog.csdn.net/feng88724/article/details/6409313 permissiongroup,就是permission里面的一个tag. 主要作用是用来显示application需要的权限, 比如你使用了<uses-permission android:name="android.permission.INTERNET" />权限, 那么在android的setting->applications->manage

浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解_Android

首先从字面意思理解两个词 onTouchEvent:触发触摸事件 onInterceptTouchEvent:触发拦截触摸事件 通过查看源代码及类继承关系 onInterceptTouchEvent:是定义于ViewGroup里面的一个方法,此事件是用于拦截触摸事件的,ViewGroup(继承自View),一个View的Group,也就是我们的一个布局如LinerLayout,各个布局类都继承自ViewGroup: onTouchEvent:是定义于View中的一个方法,处理传递到View的手势

Android 与 iOS 有哪些区别?

Android开发与iOS开发有什么不同?大概只有开发者自己才能给出最有说服力的观点,他们亲身体验,其中喜怒哀乐只有自己知道.Russell Ivanovic是澳大利亚阿德莱德公司Shifty Jelly的联合创始人.下面是他的看法. 1. Android机子繁多.第一个就是Android有各种不同的机子,这个大家都知道,每一款机子都可能运行着不同的Android版本,相比起iOS,要测试的更多.iOS完全没有这方面的顾虑. 2. 反相兼容.大家都知道Google对Android版本的更新速度非