无法将移动设备连接到本地MySQL数据库,但可以使用模拟器运行

时间:2019-06-26 09:38:06

标签: php android mysql http server

我无法将移动设备连接到本地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。 在我自己的设备上,没有消息。我不知道怎么了。

你有什么主意吗? 谢谢

3 个答案:

答案 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(在本地网络中)。但是仍然无法正常工作...