我知道如何使用http get方法调用从java传递变量值到php.But我不知道如何通过get call将数组从java传递给php。任何帮助都将不胜感激。
HttpGet httpGet = new HttpGet("http://localhost/browserHistory.php?mobile_number="+mob+"&arr="+myArray);
HttpClient client = new DefaultHttpClient();
client.execute(httpGet);
我试图像这样阅读php:
$history = $_GET["arr"];
$result = count($history);
echo ""+$result;
结果总是打印1。
答案 0 :(得分:1)
HTTP允许您发送文本。您需要在文本中表达数组。这意味着你必须以某种方式对其进行编码。
如果您从HTML表单发送数据,则会将其编码为application/x-www-form-urlencoded
。以该格式表示数据数组的通常方法是为数据的多个组件赋予相同的名称。 PHP允许表示更复杂的数据结构,但代价是失去了这种简单性。它添加了名称必须以[]
结尾的规则,当您对其进行编码时,这些规则会转到%5B%5D
。
example.php?foo%5B%5D=1&foo%5B%5D=2
然后,这会在$_GET['foo'][]
。
或者,您可以序列化为另一种数据格式,以及编码。 JSON是一个受欢迎的选择。
JSON中的相同数据是:
[1,2]
使用JSON库生成它,不要通过将字符串拼接在一起来构建JSON。
然后,您可以将其编码为application/x-www-form-urlencoded
以获取:
example.com?foo=%5B1%2C2%5D
用PHP解码:
$array = json_decode($_GET['foo']);
答案 1 :(得分:0)
您可以将正文包含在GET
请求中(HTTP
规范未明确禁止)但这不是一种好方法 - GET
并非用于发送数据到服务器。
因此,请考虑使用POST
,或者,如果数组较小,请将其序列化并在查询字符串中发布。
在Android中发送POST
:
String data[] = { "String1", "String2" };
JSONArray arr = new JSONArray(Arrays.asList(data));
DefaultHttpClient httpclient = new DefaultHttpClient();
// Put correct URL of your web service.
HttpPost post = new HttpPost("http://example.com");
post.setEntity(new StringEntity(arr.toString()));
HttpResponse response = httpclient.execute(post);