0

看似简单的问题,但在网上找不到明显的答案。

在这个链接上,有一个关于从 android 应用程序中将简单的名称值对发布到文件的教程。http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient

我想要做的是发布可以在接收端(php脚本)作为数组访问的“东西”。

在 PHP 中,我想收到:

$_POST['array']=array("key"=>"value","key2"=>"value2");

作为 android 开发的新手,也许有人可以详细说明在 Java 中创建类似的东西,然后如何发送它 - setEntity 似乎只接受名称值对......

非常感谢

4

2 回答 2

4

您应该在 Android 应用程序和 PHP 服务器中都使用 JSON Wrapper。

在 PHP 中,您应该使用json_decode(),例如:$thingFromPost = json_decode($data).

在 Java 中,有很多方法可以创建 JSONArray。一个基本的例子是:

List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
JSONArray jsonArray = new JSONArray(list);

之后,您只需将带有 HttpPost 的数组发送到您的服务器。

StringEntity stringEntity = new StringEntity(jsonArray.toString());
stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_ENCODING, "UTF-8"));
stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

HttpPost post = new HttpPost(url);          
post.setEntity(stringEntity);
post.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

如果您需要有关如何在 Android 中使用 JSON 发出请求的详细教程,请点击链接。

希望能帮助到你!

于 2012-12-12T23:04:42.930 回答
0

如果您希望 POST 的整个原始正文成为字符串化数组(仅此而已),我相信您应该使用 StringEntity 而不是 UrlEncodedFormEntity。

所以这:

String s = "asdf"; // replace this with your JSON string
StringEntity stringEntity = new StringEntity(s);
httpPost.setEntity(stringEntity);

我不熟悉 PHP,但从概念上讲,在接收端你会做类似 json.parse(request.full_body) 的事情。请注意,这(request.full_body 或等效项)与获取 POST 表单的单个值(如 request['input_field1'] )的常见模式非常不同。

但是,阅读您的问题,我并不完全确定这种 full_body 方法是您想要的。在我看来,您想通过表单变量“数组”访问数据,正如您在此处指出的那样:

$_POST['array']=array("key"=>"value","key2"=>"value2");

Note that you are not working with the entire POST body here, rather instead you are fetching the value of a single form variable called 'array' (I think, I don't really know PHP). If this is the case, then you should use NameValuePairs like something below:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("array", yourJSONArrayAsString));

This will post the array as a value associated with the form variable 'array' I believe.

于 2012-12-13T00:21:48.733 回答