Android ArrayList<String[]> to PHP


Android ArrayList<String[]> to PHP

我需要我的应用程序向php发送ArrayList<String[]>,我有这个来调用服务:

ArrayList<String[]> Items = new ArrayList<String[]>();
(...)
JSONObject JSONSend= new JSONObject();
JSONSend.put("Items", Items );
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000);
HttpResponse response;
HttpPost post = new HttpPost(SERVICE);
post.setHeader("json", JSONSend.toString());
StringEntity se = new StringEntity(JSONSend.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
post.setEntity(se);
response = client.execute(post);

在 PHP 服务上:

$data = file_get_contents('php://input');
$json = json_decode($data);
$Items = $json->{'Items'};
error_log($Items);

PHP 返回的是:

[[Ljava.lang.String;@413e2fd0, [Ljava.lang.String;@413a2940, [Ljava.lang.String;@4139df18, [Ljava.lang.String;@4141b5b0, [Ljava.lang.String;@413931c8, [Ljava.lang.String;@41348b40, [Ljava.lang.String;@41393928]

$ServMade的类型是字符串,那么如何在 php 上将数据作为数组来处理呢?我错过了什么吗?

在 android 中生成 json 字符串时,请尝试以下操作:

JSONObject JSONSend= new JSONObject();
JSONArray ja = null;
JSONArray tmp = new JSONArray();
for(String s[] : Items){
    ja = new JSONArray();
    for(int i = 0; i<s.length; i++)
        ja.put(s[i]);
    tmp.put(ja);
}
JSONSend.put("Items", tmp);

这里的问题是你在字符串数组(String[])上调用.toString()(在Java中),虽然没有被覆盖,但返回的正是你在JSON中得到的:[Ljava.lang.String;@413e2fd0]。

不确切知道 JSONObject,但我想您应该将ArrayList<String[]>(因此字符串数组数组)转换为不同的东西,以便 JSONObject 正确处理它。

另外,在 PHP 中,您不必调用$Items = $json->{'Items'}; - 可以调用$Items = $json->Items;