-1

我知道如何使用 http get 方法调用将变量值从 java 传递给 php。但我不知道如何通过 get 调用将数组从 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。

4

2 回答 2

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']);
于 2013-03-19T07:39:02.307 回答
0

您可以将正文包含在GET请求中(HTTP规范并未明确禁止),但这不是一个好的方法 -GET并不意味着用于将数据发送到服务器。

因此,请考虑POST改用,或者,如果数组很小,则将其序列化并发布到查询字符串中。

POST在 Android 中发送:

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);
于 2013-03-19T07:39:58.833 回答