variable valor strval recibir pasar parse conversion array java php json post google-cloud-messaging

java - valor - split php



Pasar matriz de cadenas a PHP como POST (3)

Creo que debes codificar JSON tu matriz de dispositivos para que obtengas una cadena que puedes pasar a BasicNameValuePair (...). En tu código php, solo tienes que usar json_decode para recuperar una matriz.

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

En tu código php:

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

Estoy tratando de pasar una matriz de cadenas a una secuencia de comandos PHP como datos de POST, pero no estoy seguro de qué hacer.

Aquí está mi código para ejecutar scripts PHP hasta el momento:

Donde estoy tratando de pasar la matriz:

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);

Llamar script de PHP:

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(); }

Y el script PHP en cuestión:

<?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); ?>

¿Algunas ideas? Gracias !

Editar

Estoy intentando lo siguiente, pero aún no hay alegría:

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); }

Esto es todo el "Informe de errores" que tengo ...

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


En primer lugar, le faltan comillas simples al acceder al conjunto $_POST en PHP. Cambiar la linea

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

a:

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

Debe habilitar el registro de errores o el resultado de los mensajes de error de PHP para la depuración utilizando el valor de ini log_errors , log_errors , error_reporting para darse cuenta de tales errores.

Pero incluso array($_POST[''devices'']) no hará lo que se pueda esperar. array(...) es una construcción de inicialización de matriz en php. Lo que significa que acaba de envolver ($ _POST [''devices'']) en otra matriz.

... Me gustaría ver el resultado de var_dump($_POST); . Esto me daría la oportunidad de ayudar más.


Para pasar una matriz a php en cadena de consulta, debe agregar [] al identificador y agregar cada elemento como entrada separada, por lo que algo como esto debería funcionar:

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

ahora, $_POST[''devices''] en el lado php contendrá una matriz.