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,即使请求成功也无法收到正确回调。
修复方案
- 去掉多余的请求体嵌套,修改数据类定义:
// 删掉原来的Post2、Item2,直接用扁平化结构 data class LocationPost( val longitude: Double, val latitude: Double )
- 依次修改API接口、Repository、ViewModel的参数类型,将原来的
Post2替换为LocationPost。 - 修正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
相关产品推荐
相关产品推荐

