You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android集成Python连接PC端MySQL报InterfaceError:2003求助

解决Android(Chaquopy)无法连接PC端MySQL的问题

问题分析

脚本在PC本地运行正常,但手机通过笔记本热点连接时报错InterfaceError: 2003: Can't connect to MySQL server on '192.168.137.1:3306' (1 Operation not permitted),核心原因是MySQL访问限制、网络连通性问题或主线程阻塞。


分步解决方案

1. 修改MySQL绑定地址,允许局域网访问

XAMPP默认的MySQL只绑定127.0.0.1(仅本地访问),需修改配置开放局域网访问:

  • 打开XAMPP控制面板,点击MySQL的Config按钮,选择my.ini(Windows)或my.cnf(Mac/Linux)
  • 找到bind-address配置项,将其值改为0.0.0.0(允许所有IP访问)或笔记本的局域网IP(比如192.168.137.1)
  • 重启XAMPP的MySQL服务

2. 授权MySQL用户允许远程访问

你的test用户可能仅被允许本地登录,需授权其从手机IP或局域网段访问:

  • 打开XAMPP的MySQL Shell,登录root用户
  • 执行授权命令:
    GRANT ALL PRIVILEGES ON recipe.* TO 'test'@'%' IDENTIFIED BY '123456';
    FLUSH PRIVILEGES;
    
    (%表示允许任何IP访问,也可以指定手机的具体IP,比如192.168.137.xxx)

3. 检查PC防火墙设置

PC防火墙可能拦截了3306端口的请求:

  • 暂时关闭Windows防火墙(或第三方防火墙)测试连接,如果能连上,再添加规则允许MySQL的3306端口通过
  • 添加规则步骤:Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → 输入3306 → 允许连接

4. 验证手机与PC的网络连通性

确保手机能访问PC的3306端口:

  • 用手机端的终端工具(如Termux)执行ping 192.168.137.1,检查是否能ping通
  • 执行nmap 192.168.137.1 -p 3306,确认端口是否开放
  • 如果ping不通,检查笔记本热点设置:确保热点允许设备之间互相访问,或笔记本的网络共享配置正确

5. 添加Android网络权限

确保APP拥有网络访问权限,在AndroidManifest.xml中添加:

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

6. 修复主线程阻塞问题

你的代码在MainActivity的主线程中直接执行MySQL连接(耗时操作),会导致ANR或崩溃,需将Python代码移到子线程执行,并封装成函数:

修改myScript.py:
import mysql.connector as mysql

HOST = "192.168.137.1"
DATABASE = "recipe"
USER = "test"
PASSWORD = "123456"

def fetch_ingredients():
    try:
        # 建立连接(注意port用整数,不是字符串)
        connection = mysql.connect(host=HOST, port=3306, database=DATABASE, user=USER, password=PASSWORD)
        cursor = connection.cursor()
        retrieve = "SELECT ingredients FROM final_merge;"
        cursor.execute(retrieve)
        rows = cursor.fetchall()
        
        # 关闭连接
        cursor.close()
        connection.close()
        return str(rows)  # 转成字符串方便显示
    except Exception as e:
        return f"Error: {str(e)}"
修改MainActivity.java:
package com.example.chaquopy;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import com.chaquo.python.PyObject;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;

public class MainActivity extends AppCompatActivity {

    TextView textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = findViewById(R.id.tv1);

        if (!Python.isStarted()) {
            Python.start(new AndroidPlatform(this));
        }

        // 在子线程执行网络操作
        new Thread(() -> {
            Python py = Python.getInstance();
            PyObject pyobj = py.getModule("myScript");
            PyObject result = pyobj.callAttr("fetch_ingredients");
            
            // 回到主线程更新UI
            runOnUiThread(() -> {
                textview.setText(result.toString());
            });
        }).start();
    }
}

内容的提问来源于stack exchange,提问作者shreeya trivedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:25:00