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

Kotlin通过Retrofit向Flask服务端传数据返回400错误问题求助

存在的3个核心问题

1. 请求体结构与服务端要求不匹配(核心错误)

你的Postman测试的请求体是扁平化结构:

{
  "longitude":1.877771999,
  "latitude":2.01999
}

但你定义的Post2嵌套了Item2,实际Retrofit发出的请求体是下面的结构,Flask的参数解析器找不到顶层的longitude、latitude参数,直接返回400错误:

{
  "item": {
    "longitude":5.2,
    "latitude":9.99
  }
}

2. Activity代码存在变量名笔误

你定义的待发送数据变量叫myPostedData,但调用viewModel.pushPost()时传入的是不存在的变量myPostedJSON,编译阶段就会报错。

3. 监听的LiveData对象不匹配

你在pushPost方法中将请求结果存入myResponse2,但Activity中监听的是myResponse,即使请求成功也无法收到正确回调。


修复方案

  1. 去掉多余的请求体嵌套,修改数据类定义:
// 删掉原来的Post2、Item2,直接用扁平化结构
data class LocationPost(
    val longitude: Double,
    val latitude: Double
)
  1. 依次修改API接口、Repository、ViewModel的参数类型,将原来的Post2替换为LocationPost。
  2. 修正Activity中的变量名和监听逻辑:
val myPostedData = LocationPost(5.2,9.99)
buttonPost.setOnClickListener {
    viewModel.pushPost(myPostedData)
    // 监听对应的myResponse2
    viewModel.myResponse2.observe(this, Observer { response ->
        if (response.isSuccessful) {
            Toast.makeText(this,"OK",Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this,"Failed to send data",Toast.LENGTH_SHORT).show()
        }
    })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:30:03