I am trying to pass a string array into a PHP script as POST data, but not sure what to do.
Here is my code for executing PHP scripts:
Where am I trying to pass an array:
nameValuePairs.add(new BasicNameValuePair("message",message)); String [] devices = {device1,device2,device3}; nameValuePairs.add(new BasicNameValuePair("devices", devices));
PHP script call:
public String callPHPScript(String scriptName, List<NameValuePair> 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(); }
And reviewed by a PHP script:
<?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]); <-- Where I want to pass array to script // Message to be sent $message = $_POST['message']; // Set POST variables $url = 'https://android.googleapis.com/gcm/send'; $fields = array( 'registration_ids' => $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); ?>
Any ideas? Thanks!
Edit
I try to do the following, but still not happy:
public void notifyDevices(Message message) { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); List<String> deviceIDsList = new ArrayList<String>(); String [] deviceIDArray; //Get devices to notify List<JSONDeviceProfile> 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); }
These are all the error messages I have ...
HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() != 200) { System.out.println("DB: Error executing script !"); }