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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:14:52