天天看点

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

Android StringEntity() 和 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()

Android StringEntity() 和 UrlEncodedFormEntity() 的区别

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