基本上我试图做的就是这个。
首先,这是我的 APIService.kt
@Headers("Content-Type: application/json")
@POST("api/v1/UsuarioController/saveDataPerson")
abstract fun saveDataPerson(@Body email: String,@Body Person: Person): Call<Person>
错误与电子邮件:字符串一致我知道对于这种请求,最好的方法是创建一个具有从json请求和获取的值的类,但是我不知道#39;我想在 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
}
}
这是我调用电子邮件的另一个类(用于登录,signUp)
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()
}
})
}
我希望实现的目标是将电子邮件添加到我的@Body而不将该字段添加到 Person.kt
请告诉我:([[EDITED]]
这是JSON失败时抛出的新内容...
E / error:java.lang.IllegalStateException:预期BEGIN_OBJECT但是 STRING在第2行第1列路径$
E / errors:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException: 预期BEGIN_OBJECT但在STRING第2行第1列路径$
答案 0 :(得分:0)
一个电话可以有1个身体参数 只有1。
因此,您必须创建一个新类,例如&#34; RequestUser&#34;扩展了&#34;用户&#34;类,然后添加&#34;电子邮件&#34;该班的领域。
所以你使用&#34;用户&#34;您的应用中的类,但是当您想要发出请求时,您需要创建一个新的&#34; RequestUser&#34;复制来自&#34; User&#34;的所有数据的对象对象,并将电子邮件添加到&#34; RequestUser&#34;对象,并使用它来执行请求。
另外,请用英文编写代码。当一半用其他语言时,它就无法读取你的代码。
答案 1 :(得分:0)
问题在于,当您调用要分配的对象时,它与您正在接收的当前结构不匹配。