我在Stackoverflow上尝试了许多解决方案。但不起作用…请帮帮我…
Retrofit 2 POST请求返回500错误。但是邮递员工作得很好。但是如果我改变了Jsonobject的属性名称,效果很好。邮递员也是。详细信息如下。
我问了服务器团队,他们说没有问题。所以你能检查一下我的代码是否有问题吗?
'接口登录服务{
@POST("api/v1/login") // POST
fun requestLogin( // Input
@Body loginData: JsonObject
): Call<LoginResponse> // Output`
'class LoginActivity: AppCompatActivity(){私有lateinit var viewBinding:ActivityLoginBind覆盖乐趣onCreate(savedInstanceState:Bundle?){pro.onCreate(savedInstanceState)viewBind=ActivityLoginBind.会膨胀(layoutInflater)setContentView(viewBind.root)
// client
val clientBuilder = OkHttpClient.Builder()
val loggingInterceptor = HttpLoggingInterceptor()
loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
clientBuilder.addInterceptor(loggingInterceptor)
clientBuilder.retryOnConnectionFailure(true)
// retrofit
val retrofit = Retrofit.Builder()
.baseUrl("secret")
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(clientBuilder.build()) // client
.build()
val userid = viewBinding.idt.text.toString()
val password = viewBinding.pwdt.text.toString()
val login = JsonObject()
login.addProperty("userId", userid)
login.addProperty("password", password)
val loginService = retrofit.create(LoginService::class.java)
viewBinding.signinbtn.setOnClickListener {
loginService.requestLogin(login).enqueue(object: Callback<LoginResponse>{
override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
if (response.isSuccessful){
val responseData = response.body()
if (responseData != null) {
Log.d("Retrofit","ResponseCode: ${responseData.code} Message: ${responseData.message}")
if (responseData.code == 1000) {
val intent = Intent(this@LoginActivity, CalendarActivity::class.java)
startActivity(intent)
}
if (responseData.code != 1000) {
cuDialog(viewBinding.root, responseData.message)
}
if (responseData.code == 1000 && viewBinding.auto.isChecked) {
}
}
}
else {
Log.w("Retrofit", "Response Not Successful ${response.code()}")
}
}
override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
Log.e("Retrofit","Error!",t)
val dialog = AlertDialog.Builder(this@LoginActivity)
dialog.setTitle("오류")
dialog.setMessage("서버와 통신에 실패했습니다.")
dialog.show()
}
})
}`
数据类LoginResponse(val is成功:布尔,val代码:Int,val消息:字符串,val结果:ArrayList
在此处输入图像描述
在此处输入图像描述
邮差工作得很好
但更奇怪的是,如果我随机更改属性的名称,它的响应很好。下面是一个例子。
val login=JsonObject()login. addProperty("sdfsfssdfd",userid)login.addProperty("sfsfdsfsd",密码)
我改变了这部分。属性名称是随机的。
在此处输入图像描述
在AndroidStudio中,工作得很好。在这里输入图像描述当然,邮递员也工作得很好。
为什么如果属性名称是“userId”,不起作用?请帮助我…
从你这边userId和密码参数是空白的。我在你的错误截图上看到过。
尝试记录您的userId和密码。
val userid = viewBinding.idt.text.toString() // I think issue is here
val password = viewBinding.pwdt.text.toString() // I think issue is here
login.addProperty("userId", userid)
login.addProperty("password", password)