Ich habe versucht, einige Informationen von einer Android-Anwendung mit der HttpUrlConnection zu einem PHP-Skript online zu senden. Ich bin zu beiden PHP sehr neu und habe die HttpUrlConnection vorher nie benutzt, also bin ich ziemlich fest, warum das nicht funktioniert. Es werden auch keine Fehler ausgelöst.Android HttpUrlConnection funktioniert nicht richtig
mein PHP-Skript ist
<?php
//get connection details from the app and then connect to db
$db_host = $_POST['db_host'];
$db_user = $_POST['db_user'];
$db_pass = $_POST['db_pass'];
$db_name = $_POST['db_name'];
$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
$device_group_id = $_POST['device_group_id'];
//create the new device group as a table in the database
$create_table_query = "CREATE TABLE" . $device_group_id . "(
device_id varchar(24),
device_alias varchar(24),
device_longitute int,
device_latititute int,
device_group_id varchar(24)
)";
if (mysqli_query($con, $create_table_query)) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . mysqli_error($con);
}
mysqli_close($con);
?>
und die AsyncTask Methode doInBackground() ist
@Override
protected Object doInBackground(Object[] params) {
String result = "";
try{
//get values to pass to the PHP script
Pair<String, String> dbHost = new Pair<>("db_host", DbConnectionInfo.DB_HOST);
Pair<String, String> dbUser = new Pair<>("db_user", DbConnectionInfo.DB_USER);
Pair<String, String> dbPass = new Pair<>("db_pass", DbConnectionInfo.DB_PASS);
Pair<String, String> dbName = new Pair<>("db_host", DbConnectionInfo.DB_NAME);
Pair<String, String> deviceGroupId = new Pair<>("device_group_id", "new_device_group");
URL url = new URL("http://tracme.net16.net/create_device_group.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// prepare request
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setChunkedStreamingMode(0);
//upload request
OutputStream outputStream = urlConnection.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
writer.write(dbHost.first + "=" + dbHost.second);
writer.write(dbUser.first + "=" + dbUser.second);
writer.write(dbPass.first + "=" + dbPass.second);
writer.write(dbName.first + "=" + dbName.second);
writer.write(deviceGroupId.first + "=" + deviceGroupId.second);
writer.close();
outputStream.close();
// read response
BufferedReader in = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) { response.append(inputLine); }
in.close();
result = response.toString();
// disconnect
urlConnection.disconnect();
}catch(MalformedURLException e) {
Log.e("Malformed URL Exception", "Malformed URL Exception");
}catch (IOException e) {
Log.e("IOException", "IOException");
}
return result;
}
der php gibt nichts aus, wenn es nicht fehlschlägt. Haben Sie die Datenbank überprüft, um festzustellen, ob die Tabelle erstellt wurde? Auch, was sind Ihre Pläne für diese Tabelle, wenn das Gerät zurückkehrt - Sie können die Tabelle natürlich nicht neu erstellen. – WEBjuju
Die Zeichenfolgen in diesem Beispiel sind nur temporäre Werte. Jedes Gerät erstellt eine eindeutige Tabelle in der Datenbank, wenn sie nicht bereits erstellt wurde. Dieses Skript wird nur dann ausgeführt, wenn das Gerät bereits über eine eigene Tabelle verfügt. Die Prüfungen dafür werden im Java-Code durchgeführt. – user2145312
Ich bin bei der Arbeit und werde es überprüfen müssen, wenn ich nach Hause komme. Ich denke, die Antwort von m. Waqas Pervers ist wahrscheinlich richtig darüber nachzudenken! – user2145312