Jetpack Compose向PostgreSQL新列存数据失败排查求助
问题排查:Jetpack Compose数据无法保存到PostgreSQL
已完成PostgreSQL新增数据库列操作,但在Jetpack Compose中填写OutlinedTextField后点击按钮,信息无法保存到PostgreSQL数据库,无任何反馈。技术栈:Jetpack Compose(前端)、Flask(后端)、PostgreSQL(数据库)。
核心问题及修复建议
1. 前后端字段完全不匹配(最关键)
- 前端模型字段名错误:
UserRelationshipModel定义的字段是relationship,但在UserRelationshipLayoutScreen创建实例时错误使用relationships = relationship,多了后缀s,导致后端无法解析该字段:// 错误写法 val userData = UserRelationshipModel( relationships = relationship ) // 正确写法 val userData = UserRelationshipModel( relationship = relationship ) - 前端未传递后端必需字段:Flask接口
postRelationshipsData需要从请求体获取email来关联用户,但前端未传递该字段,直接导致后端找不到对应用户,返回400错误但前端未处理。需修改模型并传递邮箱:// 更新UserRelationshipModel data class UserRelationshipModel( @PrimaryKey val id: Int? = null, val relationship: String? = null, val email: String? = null // 新增邮箱字段 ) // 点击按钮时传入当前用户邮箱 val userData = UserRelationshipModel( relationship = relationship, email = 当前登录用户邮箱 // 替换为实际用户邮箱值 )
2. Flask模型关联逻辑错误
RelationshipData类的外键指向userdetails.id,但关联的模型却写了Task,应该关联Userdetails模型:
# 错误写法 user = db.relationship('Task', backref=db.backref('relationship_Data', lazy=True)) # 正确写法 user = db.relationship('Userdetails', backref=db.backref('relationship_Data', lazy=True))
3. 前端ViewModel语法错误
UserCredentialsRelationshipViewModel中回调函数的语法不完整,handleResult: (NetworkResult<String>) - 需补充为-> Unit:
// 错误写法 fun postUserRelationshipData( context: Context, userData: UserRelationshipModel, handleResult: (NetworkResult<String>) - ) { // 正确写法 fun postUserRelationshipData( context: Context, userData: UserRelationshipModel, handleResult: (NetworkResult<String>) -> Unit ) {
4. Flask异常处理不透明
当前Flask接口仅返回通用500错误,未打印具体异常信息,无法定位后端问题。修改异常处理逻辑:
except Exception as e: print(f"具体错误信息:{str(e)}") # 打印错误到日志 return jsonify({'error': 'Internal Server Error', 'details': str(e)}), 500
5. 前端错误处理缺失
当前handleResult的NetworkResult.Error分支无日志输出和用户提示,无法得知请求失败原因:
is NetworkResult.Error -> { showLoadingAnim = false Log.d("保存失败", result.message ?: "未知错误") Toast.makeText(context, result.message ?: "数据保存失败", Toast.LENGTH_SHORT).show() }
6. Retrofit接口路径验证
检查UserService中的@POST("relationshipData")路径是否与Flask路由完全匹配,同时确认BASE_URL是否包含后端服务完整域名(注意末尾斜杠,例如https://flask-render-example.com/)。
内容的提问来源于stack exchange,提问作者Josef M
相关产品推荐
相关产品推荐

