我最近在我的应用中使用了很多HTTP帖子,而且我一直在使用这个模板:
HttpPost httpPost = new HttpPost(server);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("name","John"));
nameValuePairs.add(new BasicNameValuePair("age",13+""));
...
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpClient.execute(httpPost);
在服务器的PHP脚本上:
$name = $_POST['name'];
$age = $_POST['age'];
...
这一直都很完美。但是,最近我得到了一个请求,数据实际上应该是一个JSON本身,它将包含所有这些键值对。
更明确地说,编写PHP脚本是为了做到这一点:
$json = $_POST['data'];
$name = $json['name'];
$age = $json['age'];
...
虽然这是一个笨拙的简单修改,但我似乎无法在Android代码中使用它,即我找不到将JSON添加到HTTP数据的正确方法。
我这样做:
JSONObject json = new JSONObject();
json.put("name", "John");
json.put("age", 13+"");
...
但接下来要做什么?如何使用密钥“data”将此JSON添加到HTTP?
我试过这个:
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("data", json.toString()));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
但我不确定这是否是正确的做法,服务器的响应也表示错误。
我该怎么办?我应该如何一般地添加一个带有键的JSONObject,甚至是JSONArray?
谢谢!
编辑:请不要把我发送到其他SO链接,我看过,没有人直接回答我的观点。
答案 0 :(得分:1)
一般写json: http://www.vogella.com/tutorials/AndroidJSON/article.html#androidjson_write
对于您的任务,您不需要将您的json放入列表中。只是做
httpPost.setEntity(new UrlEncodedFormEntity(json.toString()));
//or else use this
httpPost.setEntity(new StringEntity(json.toString(), HTTP.UTF_8));
编辑:
JSONObject json = new JSONObject();
json.put("name", "John");
json.put("age", 13+"");
JSONObject data = new JSONObject();
data.put("data", json.toString());
httpPost.setEntity(new UrlEncodedFormEntity(data.toString()));