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.