将String数组作为POST传递给PHP

我试图将一个字符串数组作为POST数据传递给PHP脚本但不确定该怎么做。

这是我到目前为止执行PHP脚本的代码:

我试图传递数组的地方:

nameValuePairs.add(new BasicNameValuePair("message",message)); String [] devices = {device1,device2,device3}; nameValuePairs.add(new BasicNameValuePair("devices", devices));// <-- Can't pass String[] to BasicNameValuePair callPHPScript("notify_devices", nameValuePairs); 

调用PHP脚本:

 public String callPHPScript(String scriptName, List parameters) { HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://localhost/" + scriptName); String line = ""; StringBuilder stringBuilder = new StringBuilder(); try { post.setEntity(new UrlEncodedFormEntity(parameters)); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() != 200) { System.out.println("DB: Error executing script !"); } else { BufferedReader rd = new BufferedReader(new InputStreamReader( response.getEntity().getContent())); line = ""; while ((line = rd.readLine()) != null) { stringBuilder.append(line); } } } catch (IOException e) { e.printStackTrace(); } System.out.println("DB: Result: " + stringBuilder.toString()); return stringBuilder.toString(); } 

和PHP脚本有问题:

 <?php include('tools.php'); // Replace with real BROWSER API key from Google APIs $apiKey = "123456"; // Replace with real client registration IDs $registrationIDs = array($_POST[devices]);  $registrationIDs, 'data' => array( "message" => $message ), ); $headers = array( 'Authorization: key=' . $apiKey, 'Content-Type: application/json' ); // Open connection $ch = curl_init(); // Set the url, number of POST vars, POST data curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) ); // Execute post $result = curl_exec($ch); // Close connection curl_close($ch); print_as_json($result); ?> 

有任何想法吗? 谢谢 !

编辑

我正在尝试以下但仍然没有快乐:

 public void notifyDevices(Message message) { List nameValuePairs = new ArrayList(); List deviceIDsList = new ArrayList(); String [] deviceIDArray; //Get devices to notify List deviceList = getDevicesToNotify(); for(JSONDeviceProfile device : deviceList) { deviceIDsList.add(device.getDeviceId()); } //Array of device IDs deviceIDArray = deviceIDsList.toArray(new String[deviceIDsList.size()]); for(String deviceID : deviceIDArray) { nameValuePairs.add(new BasicNameValuePair("devices[]", deviceID)); } //Call script callPHPScript("GCM.php", nameValuePairs); } 

这就是我所有的“错误报告”……

  HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() != 200) { System.out.println("DB: Error executing script !"); } 

要在查询字符串中将数组传递给php,您应该将[]添加到标识符并将每个项目添加为单独的条目,因此这样的事情应该起作用:

 nameValuePairs.add(new BasicNameValuePair("devices[]", device1)); nameValuePairs.add(new BasicNameValuePair("devices[]", device2)); nameValuePairs.add(new BasicNameValuePair("devices[]", device3)); 

现在,PHP端的$_POST['devices']将包含一个数组。

我认为您应该对您的设备数组进行json编码,以便获得一个字符串,您可以将其传递给BasicNameValuePair(…)。 在你的PHP代码中,你只需要使用json_decode来获取一个数组。

 JSONArray devices = new JSONArray(); devices.put(device1); devices.put(device2); devices.put(device3); String json = devices.toString(); nameValuePairs.add(new BasicNameValuePair("devices", devices)); 

在你的PHP代码中:

 $devices = $_POST['devices']; $devices = json_decode($devices); 

首先,在PHP中访问$_POST数组时,您缺少单引号。 改变线

 $registrationIDs = array($_POST[devices]); 

至:

 $registrationIDs = array($_POST['devices']); 

您应该使用ini值display_errorslog_errorserror_reporting启用错误日志记录或PHP错误消息的输出以进行调试,以发现此类错误。


但即使是array($_POST['devices'])也不会做出可能的预期。 array(...)是php中的数组初始化构造。 这意味着你只需将($ _POST [‘devices’])包装到另一个数组中。

…想看看var_dump($_POST);的输出var_dump($_POST); 。 这会让我有机会进一步帮助..