目录摘要一、前言二、开发环境三、MySQL 前期核心配置1、创建项目专属数据库2、开启 MySQL 远程访问权限3、放行防火墙端口4、数据库连接必要参数四、FastAPI 后端配置与服务部署1、数据库环境变量配置2、全局跨域解决3、后端端口统一适配五、安卓端关键配置1、清单文件权限配置2、接口请求地址3、登录注册按钮交互限制六、项目数据表设计七、全流程报错复盘与解决方案报错 1连接超时 failed to connect to /10.0.2.2:8080报错 2bcrypt has no attribute about报错 3500 Internal Server Error password cannot be longer than 72 bytes报错 4Access denied for user rootxxx八、最终实现效果九、开发总结与心得摘要在基于大模型的智能衣橱管理系统安卓项目开发中数据持久化存储是核心环节用户账号、衣橱衣物信息、穿搭记录、个性化标签等业务数据均需要数据库提供稳定支撑。本文以 Windows11 Android Studio Hedgehog MySQL 8.0.36 Python FastAPI 为完整开发环境完整记录安卓模拟器 后端服务 MySQL三层联动的数据对接全过程。项目本身支持云端 MySQL 数据库部署且前期测试已验证云端环境可正常连通使用由于暂时未购买云数据库服务现阶段开发采用本地 MySQL完成数据存储与接口调试。本文涵盖数据库远程权限配置、后端跨域处理、端口适配、bcrypt 密码加密兼容、网络请求超时、500 内部服务器错误等全场景实战踩坑完整复盘从数据库连通失败到用户注册功能成功落地的全部解决方案适合课程设计、毕设、安卓后端联动开发参考复用。一、前言在智能衣橱管理系统开发中仅依靠安卓本地 SP、文件存储无法实现账号登录、多设备同步、衣物数据统一管理等核心业务。因此项目采用主流三层架构Android 客户端Compose FastAPI 后端 数据库核心业务数据存储需求用户手机号、加密密码、昵称等账号数据持久化衣物照片地址、分类标签、自定义备注录入入库穿搭灵感收藏、穿搭方案记录、个人偏好数据同步统一通过后端接口完成数据增删改查规范前后端交互本项目架构兼容云端数据库与本地数据库双模式前期已完成云端 MySQL 远程连接测试接口读写、数据交互均可正常运行考虑到开发成本与现阶段调试需求暂时未购置云数据库因此本次开发全部基于本地 MySQL 8.0完成部署。相较于安卓直连 JDBC 的简易写法接口中转架构更贴合企业开发规范但同时衍生大量问题端口不匹配、跨域拦截、MySQL 远程访问限制、加密库版本冲突、模拟器网络隔离、服务启动路径错误等。二、开发环境操作系统Windows 11 64 位开发工具Android Studio Hedgehog、Navicat Premium、PowerShell数据库MySQL 8.0.36本地部署项目兼容云端 MySQL后端技术Python 3.13 FastAPI运行设备Android 模拟器项目技术栈Kotlin Jetpack Compose FastAPI MySQL8.0三、MySQL 前期核心配置1、创建项目专属数据库使用 Navicat 执行 SQL创建专属库并指定编码格式CREATE DATABASE IF NOT EXISTS mywardrobe DEFAULT CHARACTER SET utf8mb4;后续后端配置文件、数据表全部依托mywardrobe保证项目隔离。2、开启 MySQL 远程访问权限MySQL 默认仅允许127.0.0.1本地访问模拟器与后端属于跨 IP 请求必须放开权限编辑 MySQL 配置文件my.inibind-address 0.0.0.0重启 MySQL 服务执行授权语句-- 允许root用户任意IP访问 CREATE USER root% IDENTIFIED BY 你的MySQL密码; GRANT ALL PRIVILEGES ON *.* TO root%; FLUSH PRIVILEGES;3、放行防火墙端口Windows 防火墙会拦截 3306、8080 端口导致连接超时打开 Windows 防火墙 → 高级设置入站规则新建规则放行 3306数据库、8080后端开发调试阶段可临时关闭防火墙减少干扰4、数据库连接必要参数MySQL8.0 连接必须携带参数避免时区、SSL、公钥报错useSSLfalse serverTimezoneUTC allowPublicKeyRetrievaltrue补充切换为云端数据库时只需修改后端.env中的MYSQL_HOST为公网 IP、端口、云端账号密码即可业务代码无需改动迁移成本极低。四、FastAPI 后端配置与服务部署1、数据库环境变量配置后端使用.env文件统一管理数据库信息避免硬编码方便后期无缝切换本地 / 云端库MYSQL_HOST127.0.0.1 MYSQL_PORT3306 MYSQL_USERroot MYSQL_PASSWORD你的本地MySQL密码 MYSQL_DATABASEmywardrobe2、全局跨域解决安卓模拟器网络请求会被同源策略拦截在main.py添加跨域中间件from fastapi.middleware.cors import CORSMiddleware app FastAPI() # 全局放行跨域 app.add_middleware( CORSMiddleware, allow_origins[*], allow_credentialsTrue, allow_methods[*], allow_headers[*], )3、后端端口统一适配安卓项目内置固定请求地址http://10.0.2.2:808010.0.2.2是 Android 模拟器访问电脑宿主机的固定 IP最初后端默认端口 8000端口不一致直接请求超时✅ 最终解决方案不修改安卓代码统一后端为 8080 端口正确启动命令# 必须切入backend目录否则找不到main.py cd D:\my-wardrobe-main\my-wardrobe-main\backend uvicorn main:app --reload --host 0.0.0.0 --port 8080五、安卓端关键配置1、清单文件权限配置AndroidManifest.xml添加网络权限与明文访问!-- 网络权限 -- uses-permission android:nameandroid.permission.INTERNET / !-- 允许HTTP明文请求解决本地接口拦截 -- application ... android:usesCleartextTraffictrue2、接口请求地址模拟器固定访问地址全程无需修改局域网 IPhttp://10.0.2.2:8080/3、登录注册按钮交互限制项目原生 Compose 登录 / 注册按钮存在严格禁用逻辑手机号必须 11 位数字密码长度≥6 位注册页两次密码必须一致加载中自动禁用按钮调试阶段可临时修改enabled true强制解锁方便接口测试。六、项目数据表设计贴合智能衣橱实际业务设计三张核心数据表本地 / 云端数据库通用USE mywardrobe; -- 用户表账号登录、注册信息 CREATE TABLE user( id INT PRIMARY KEY AUTO_INCREMENT, phone VARCHAR(11) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, nickname VARCHAR(30) NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 衣物信息表录入的全部衣橱数据 CREATE TABLE wardrobe_item( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, category VARCHAR(20), image_uri VARCHAR(255), tags TEXT, note VARCHAR(200), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 穿搭灵感收藏表 CREATE TABLE inspire_favorite( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, target_id VARCHAR(50) NOT NULL, type VARCHAR(10), create_time DATETIME DEFAULT CURRENT_TIMESTAMP );七、全流程报错复盘与解决方案报错 1连接超时 failed to connect to /10.0.2.2:8080报错原因后端启动端口 8000与安卓 8080 不匹配未在 backend 目录启动服务服务未正常运行防火墙拦截 8080 端口解决办法统一后端端口为 8080切入正确目录启动服务放行防火墙端口。报错 2bcrypt has no attribute about报错原因Python3.13 新版本与高版本 bcrypt 加密库不兼容版本冲突解决办法降级安装稳定版依赖pip install bcrypt4.0.1报错 3500 Internal Server Error password cannot be longer than 72 bytes报错原因bcrypt 加密算法硬性限制密码明文最大 72 字节超长直接崩溃解决办法修改后端加密函数自动截断超长内容def hash_password(plain: str) - str: # 截断至72字节适配bcrypt规则 plain_trimmed plain.encode(utf-8)[:72].decode(utf-8, ignore) return pwd_context.hash(plain_trimmed)报错 4Access denied for user rootxxx报错原因MySQL 未开放远程权限、.env账号密码填写错误解决办法重新执行远程授权 SQL核对数据库配置文件参数。八、最终实现效果如图示成功在数据库得到注册者信息其他详细信息用户可在登录后补充完善如下图本地 MySQL 服务正常运行远程访问权限完全放开FastAPI 后端稳定运行在0.0.0.0:8080跨域生效、数据库连接成功Android 模拟器与后端接口通信正常无超时、无拦截用户注册、登录接口正常响应密码加密无报错注册数据成功写入 MySQLuser表三层数据链路完全打通项目原生支持云端数据库切换后续购置云服务后仅需修改数据库配置即可直接上线使用后续衣物新增、标签存储、数据查询功能可无缝基于当前环境开发九、开发总结与心得多环境适配架构扩展性更强本项目提前兼容本地 / 云端双数据库模式云端连接方案已测试可行仅因阶段性开发成本选择本地数据库过渡后期上线部署十分便捷。端口统一是网络连通核心安卓模拟器存在固定访问 IP 与端口优先修改后端配置适配前端避免大范围改动安卓代码降低出错概率。环境兼容问题优先降级处理新版 Python、第三方加密库容易出现底层兼容 bug遇到依赖报错优先选用稳定旧版本快速解决问题。权限类配置缺一不可MySQL 远程权限、安卓网络权限、后端跨域、防火墙端口放行任何一项缺失都会导致连接失败排查时按顺序逐一核对。提前适配底层组件限制加密算法、数据库字段长度、接口参数限制等隐性规则需要提前做代码兼容避免运行时服务崩溃。分层排查提高排错效率服务启动 → 端口连通 → 数据库连接 → 接口调试循序渐进定位问题防止多 bug 叠加难以排查。