python打包APP运行报错求指导

Builzore导出APP后,在安卓虚拟机正常运行,且pymysql无报错,但安装到手机后,却出现pymysql报错pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '...' ([Errno 1] Operation not permitted)")
MySQL服务器平时都是正常使用,且外网连接都没有问题,但是打包成APP后,就报错了。
以下为报错信息

img

你的mysql绑定的ip和端口号是否能通呢?在你手机上,最好代码里加入ping验证保证连接正常

回答引用ChatGPT:
这个错误通常是因为移动设备无法连接到MySQL服务器。请确保您的移动设备可以访问MySQL服务器,并且您在连接MySQL服务器时使用了正确的IP地址和端口号。

另外,如果您使用的是Android设备,请确保您已经在应用程序的AndroidManifest.xml文件中添加了Internet权限。可以通过在AndroidManifest.xml文件中添加以下行来添加Internet权限:

<uses-permission android:name="android.permission.INTERNET" />

如果问题仍然存在,请检查您的代码以确保您正确地配置了MySQL连接。您可以尝试使用命令行或其他工具连接到MySQL服务器以进行测试。如果一切正常,请检查您的移动设备的网络设置以确保您可以连接到MySQL服务器。

要使用命令行或其他工具连接到MySQL服务器进行测试,您可以按照以下步骤进行操作:

打开终端或命令提示符。

输入以下命令以连接到MySQL服务器:

mysql -h 主机名或IP地址 -u 用户名 -p 密码

请替换主机名或IP地址、用户名和密码为您的MySQL服务器的实际值。

如果连接成功,则会显示MySQL服务器的版本信息和MySQL提示符,例如:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 123456
Server version: 5.7.28-0ubuntu0.18.04.4 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.

您可以尝试在MySQL提示符下执行一些基本的SQL查询来测试连接。例如,输入以下命令来查看所有数据库:

show databases;

如果连接失败,则会显示错误消息,例如“ERROR 2003 (HY000): Can't connect to MySQL server on '主机名或IP地址' (110)”等。根据错误消息来检查您的连接设置或MySQL服务器的状态。
您也可以使用其他工具,例如MySQL Workbench、Navicat或phpMyAdmin等来连接到MySQL服务器进行测试。这些工具通常具有用户友好的界面和更丰富的功能。

我看你的程序使用到了数据库,你在安卓虚拟机上能够使用,说明你的电脑上能够连接到MySQL数据库,但是你安装到手机上后链接不上,是因为你的手机连接不上MySQL数据库,手机所在的网络和数据库所在的网络是不一样的,你看下你的手机和数据库所在的电脑连接的网络是一样的吗,其次,你的程序中,数据库的连接地址不能是127.0.0.1 要修改为你的数据库所在电脑的实际ip地址,你可以打开cmd窗口,输入ipconfig查看你的数据库所在电脑的实际ip地址。

这个问题的可能原因是您的手机上没有权限连接到 MySQL 服务器。请确保您的手机与 MySQL 服务器处于同一局域网中,而且允许外部设备访问 MySQL 服务器。如果您的 MySQL 服务器在 Linux 系统上运行,则需要为 MySQL 数据库设置防火墙规则或更改 MySQL 的配置文件,以允许来自其他网段的连接。

另外,您需要注意以下几点,以确保应用程序可以正确访问 MySQL 服务器:

检查您的代码是否正确指定了 MySQL 服务器的 IP 地址和端口号;

确认您的 MySQL 账户具有从外部设备连接 MySQL 服务器的权限;

确认您的手机已连接到正确的 Wi-Fi 网络,并可以访问 Internet;

在应用中,使用 try...except 语句来处理连接 MySQL 服务器时可能出现的异常情况,如网络连接失败、服务器宕机等。

最后,将您的应用程序安装到物理设备上时,需要注意您的应用程序是否已经签名,以及是否给予了应用程序访问 MySQL 服务器的权限。

网络通吗

该回答参考ChatGPT:
这个错误提示一般是因为安卓系统的安全机制限制了APP对网络的访问权限。可以尝试在安卓Manifest文件中添加网络访问权限:


<uses-permission android:name="android.permission.INTERNET" />

如果还是无法解决问题,可以尝试使用安卓的日志工具查看更详细的错误信息,以便进一步调试。

安卓虚拟机使用的是电脑的网络,手机运行要用手机接入网络,应该是你的手机和mysql数据库连通有问题

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
该错误通常是因为手机上的安全限制阻止了你的应用程序连接到MySQL服务器。

你可以尝试以下几种方法来解决这个问题:

  1. 确保你的手机和MySQL服务器在同一个网络中,并且MySQL服务器可以被访问。

  2. 如果你的MySQL服务器在本地计算机上运行,并且你正在使用Android Studio Emulator来测试你的应用程序,请确保使用10.0.2.2:port连接到本地MySQL服务器。其中port为你的MySQL服务器端口号。例如:10.0.2.2:3306。

  3. 如果你使用的是云服务器上的MySQL服务器,请检查是否开启了公共IP访问。

  4. 确保你的应用程序具有允许连接到互联网的权限。在AndroidManifest.xml文件中添加以下代码:

    <uses-permission android:name="android.permission.INTERNET"/>
  1. 确保你的应用程序具有在后台运行的权限。在AndroidManifest.xml文件中添加以下代码:
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
  1. 检查你的网络连接是否正常。你可以使用以下代码检查:
    import urllib.request
    def internet_on():
        try:
            urllib.request.urlopen('http://74.125.224.72', timeout=1)
            return True
        except urllib.request.URLError as err:
            return False

以上是一些可能会出现这个问题的原因,你可以根据你的情况尝试这些方法来解决这个问题。

代码示例(修改要连接的主机和数据库名):

    import pymysql

    # 打开数据库连接
    db = pymysql.connect("localhost", "username", "password", "database")

    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()

    # 使用 execute() 方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")

    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()

    print("Database version : %s " % data)

    # 关闭数据库连接
    db.close()

如果我的回答解决了您的问题,请采纳!

该回答引用ChatGPT
根据你提供的信息,可以初步判断是安卓手机无法连接到MySQL服务器导致的错误。可能是因为安卓手机与MySQL服务器之间的网络连接存在问题,或者是MySQL服务器的配置问题。
以下是一些可能的解决方案:
1. 确保安卓手机与MySQL服务器在同一局域网内,并且可以相互访问。可以尝试使用ping命令测试两者之间的网络连接。
2. 检查MySQL服务器的配置,确保允许外部访问。可以在MySQL配置文件中添加以下内容:

bind-address = 0.0.0.0

这将允许MySQL服务器接受来自任何IP地址的连接。
3. 确保在Python代码中正确设置了MySQL服务器的IP地址和端口号。可以尝试使用以下代码测试连接:

import pymysql
conn = pymysql.connect(host='your_mysql_server_ip', port=3306, user='your_username', password='your_password', db='your_database')

如果连接成功,则说明问题可能出现在其他地方。
4. 如果以上方法都无法解决问题,可以尝试使用其他的MySQL客户端库,例如mysql-connector-python或者pyodbc。
希望以上解决方案能够帮助你解决问题。