私はHttpUrlConnectionを使用してアンドロイドアプリケーションからいくつかの情報をオンラインでPHPスクリプトに送信しようとしています。私はPHPの両方にとって非常に新しく、以前はHttpUrlConnectionを使用したことがないので、なぜこれが動作していないのか非常に固執しています。エラーもスローされません。Android HttpUrlConnectionが正しく動作しない
私のPHPスクリプトは
<?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);
?>
あるとAsynctask方法doInBackground()は、あなたのコードで
@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;
}
エラーがなければ何も出力されません。だから、テーブルが作成されているかどうかを確認するためにdbをチェックしましたか?また、そのデバイスが返ってきたときに、そのテーブルの計画は何ですか?もちろん、テーブルを再作成することはできません。 – WEBjuju
この例の文字列は単なる一時的な値です。各デバイスは、まだ作成されていない場合は、データベース内に一意のテーブルを作成します。このスクリプトは、デバイスに独自のテーブルがない場合にのみ実際に実行されます。これのチェックはjavaコードで実行されます。 – user2145312
私は仕事中ですので、いつ帰宅するか確認する必要があります。私は答えがmによって提供されたと思います。 Waqas pervesはおそらくそれについての正しい考え方です! – user2145312