我无法将移动设备连接到本地MySQL数据库。我正在使用Wamp服务器64位。但是,它完全可以在仿真器设备上运行。 我只是遵循了本教程:https://www.youtube.com/watch?v=4e8be8xseqE。
当我在模拟器上运行应用程序时,地址10.0.2.2起作用。 当我在自己的设备上运行该应用程序时,我将地址更改为127.0.0.1或我的IPv4。 我什至尝试将移动设备连接到计算机wifi的热点,并使用特定的IPv4,但这没用。
我还安装了Android Terminal Emulator并对计算机的IP进行ping操作,但是那没用...这很奇怪,因为我的手机与计算机的无线网络连接良好。
用于连接到本地MySQL数据库的Android代码:
@Override
protected String doInBackground(String... params) {
String type = params[0];
String login_url = "http://192.168.1.34/login.php";
if(type.equals("login")) {
try {
String username = params[1];
String password = params[2];
URL url = new URL(login_url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("username", "UTF-8") + "=" +
URLEncoder.encode(username, "UTF-8") + "&" + URLEncoder.encode("password", "UTF-8") + "=" +
URLEncoder.encode(password, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "ISO-8859-1"));
String result = "";
String line;
while((line = bufferedReader.readLine()) != null) {
result += line;
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
PHP脚本: connect.php
<?php
$db_name = "employee101";
$mysql_username = "root";
$mysql_password = "";
$server_name = "localhost";
$conn = mysqli_connect($server_name, $mysql_username, $mysql_password, $db_name);
?>
login.php
<?php
require "conn.php";
$user_name = $_POST["username"];
$user_name = $_POST["password"];
$user_pass = "123";
$mysql_qry = "select * from employee_data where username like '$user_name' and password like '$user_pass';";
$result = mysqli_query($conn, $mysql_qry);
if(mysqli_num_rows($result) > 0)
{
echo "login success";
}
else
{
echo "login not success";
}
?>
因此,在模拟器上显示带有消息“登录成功”的Toast。 在我自己的设备上,没有消息。我不知道怎么了。
你有什么主意吗? 谢谢
答案 0 :(得分:0)
您需要同时在一个wifi(网络)中连接要测试的系统和设备 您的模拟器在系统中,因此可以正常工作。
答案 1 :(得分:0)
您可以尝试使用json响应
header('Content-Type: application/json');
if(mysqli_num_rows($result) > 0)
{
$data['status'] = 200;
$data['message'] = "login success";
echo json_encode($data);
}
else
{
$data['status'] = 200;
$data['message'] = "login not success";
echo json_encode($data);
}
答案 2 :(得分:0)
因此,我解决了无法从手机ping PC的问题。那是防火墙的限制。我只是使用以下命令添加了一个例外:
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow
但是,我一直没有将手机连接到MySQL本地数据库。我的手机已连接到PC的wifi热点。目前,他的IP是192.168.137.204。
在我的代码中,我使用了以下URL:“ http://192.168.137.1/login.php”,因为192.168.137.1是我的PC的IP(在本地网络中)。但是仍然无法正常工作...