gpt4 book ai didi

android - Retrofit2 向 Body 对象添加额外的字符串

转载 作者:行者123 更新时间:2023-11-29 02:35:55 27 4
gpt4 key购买 nike

基本上我想做的就是这个。

首先这是我的APIService.kt

@Headers("Content-Type: application/json")
@POST("api/v1/UsuarioController/saveDataPerson")
abstract fun saveDataPerson(@Body email: String,@Body Person: Person): Call<Person>

错误与 email: String 有关 我知道对于这种请求,最好的方法是创建一个类,其中包含请求的值并从 json 中获取,但是我不想这样做在我的 Person.kt

中创建相同值的电子邮件

结构是这样的

Person.kt

class Person : Serializable {
var user: User
var imc: String
var name: String
var gender: Boolean
var age: Int
var height: Float
var weight: Float

@SerializedName("message")
var message: String? = null

constructor(user: User,imc: String, name: String, gender: Boolean, age: Int, height: Float, weight: Float){
this.user = User
this.imc = imc
this.name = name
this.gender = gender
this.age = age
this.height = height
this.weight= weight
}
}

这是我调用电子邮件的另一个类(用于登录、注册)

User.kt

class Usuario() : Serializable {
var rol: String = ""
var email: String = ""
var pass: String = ""
var active: Boolean = false

@SerializedName("message")
var message: String? = null

constructor(rol: String, email: String, pass: String, active: Boolean): this(){
this.rol = rol;
this.email = email;
this.pass = pass;
this.active = active;
}

}

以及执行此操作的类。

private fun registerPersonalData(){
btnBMI.isClickable = false
btnBMI.startAnimation()
val person = restManager!!.getApiService()!!.saveDataPerson(Person(User("rol",commonMethod.getUserPreferenceValue(),"password",true),commonMethod.categoryBMI(commonMethod.calcBMI(commonMethod.calcHeightMeters(et_height.text.toString().toFloat(),heightRadioSelect.position.toString().toInt()),commonMethod.calcWeightKilograms(et_weight.text.toString().toFloat(),weightRadioSelect.position.toString().toInt()))),et_name.text.toString(),genderRadioSelect.position.toString().toBoolean(),age.toInt(),et_height.text.toString().toFloat(),et_weight.text.toString().toFloat()))
person.enqueue(object : Callback<Person> {
override fun onResponse(call: Call<Person>, response: retrofit2.Response<Person>) {
when(response.body()?.message){
"Empty Fields"->Toast.makeText(this@RegisterBMIActivity,getString(R.string.invalid_data),Toast.LENGTH_LONG).show()
"No linked account"->Toast.makeText(this@RegisterBMIActivity,getString(R.string.no_associated_account),Toast.LENGTH_LONG).show()
"No IMC linked"->Toast.makeText(this@RegisterBMIActivity,getString(R.string.bmi_unknown),Toast.LENGTH_LONG).show()
"Invalid data"-> Toast.makeText(this@RegisterBMIActivity,getString(R.string.invalid_data),Toast.LENGTH_LONG).show()
"Success"->registroExitoso()
else -> Toast.makeText(this@RegisterBMIActivity,getString(R.string.unknown_error),Toast.LENGTH_LONG).show()
}
btnBMI.isClickable = true
btnBMI.doneLoadingAnimation(R.color.md_yellow_300, (BitmapFactory.decodeResource(resources,R.drawable.check)))
}
override fun onFailure(call: Call<Person>, t: Throwable) {
Log.e("error", t.message)
btnBMI.isClickable = true
btnBMI.revertAnimation()
}
})
}

好吧,我想要实现的目标是将email 添加到我的@Body,而不将该字段添加到Person.kt

请多多指教:(

[[编辑]]

这是在 JSON 失败时抛出的新内容...

E/error: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $

E/errors:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $

最佳答案

一个调用可以有 1 个主体参数。
只有 1 个。

因此您必须创建一个新类,例如扩展“User”类的“RequestUser”,然后在该类中添加“email”字段。

所以你在你的应用程序中使用了“User”类,但是当你想发出请求时,你创建了一个新的“RequestUser”对象,它复制了“User”对象中的所有数据,并将电子邮件添加到“RequestUser”对象,并使用它来执行请求。

另外,请用英文编写您的代码。当您的代码有一半是其他语言时,您将无法阅读它。

关于android - Retrofit2 向 Body 对象添加额外的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47082324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com