Android 改装';s onFailure方法即使在正确响应后也会被调用

Android 改装';s onFailure方法即使在正确响应后也会被调用,android,kotlin,gson,retrofit2,Android,Kotlin,Gson,Retrofit2,以下是我在PostMan中的请求参数 {"assign_id":"1","type":2,"attendance_list":[{"stud_id":"1703","attendanceID":"1","stud_attendance":"4"},{"stud_id":"1704","attendanceID":"2","stud_attendance":"1"},{"stud_id":"1705","attendanceID":"3","stud_attendance":"1"},{"stud

以下是我在PostMan中的请求参数

{"assign_id":"1","type":2,"attendance_list":[{"stud_id":"1703","attendanceID":"1","stud_attendance":"4"},{"stud_id":"1704","attendanceID":"2","stud_attendance":"1"},{"stud_id":"1705","attendanceID":"3","stud_attendance":"1"},{"stud_id":"1706","attendanceID":"4","stud_attendance":"1"},{"stud_id":"1707","attendanceID":"5","stud_attendance":"1"},{"stud_id":"1727","attendanceID":"25","stud_attendance":"1"}]}
以下是回应

{"status":1,"msg":"Success"}
现在在我的Android应用程序中,我正在使用Gson进行改装。但是通过Gson时,我遇到了一些问题,所以我以
jsonObject
jsonarray
的形式发送请求参数

下面是我按下按钮向服务器提交请求时的代码

val jObjRequest = JsonObject()

                jObjRequest.addProperty("assign_id",ClassModelInstance.getInstance().classInfo.assignId)
                jObjRequest.addProperty("type","2")
                val attendanceArray = JsonArray()
                for(i in 0 until ClassModelInstance.getInstance().studentInfos.size){
                    val jsonObject = JsonObject()
                    jsonObject.addProperty("stud_id",ClassModelInstance.getInstance().studentInfos[i].studId)
                    jsonObject.addProperty("attendanceID",1)
                    jsonObject.addProperty("stud_attendance",ClassModelInstance.getInstance().studentInfos[i].studAttendance)
                    attendanceArray.add(jsonObject)
                }

                jObjRequest.addProperty("attendance_list",attendanceArray.toString())
                Log.i("PritishAttendanceApi2", jObjRequest.toString())

                val submitAttendanceInterface = ApiClient.client.create(SubmitAttendanceInterface::class.java)

                submitAttendanceInterface.takeAttendance(jObjRequest)
                                .enqueue(object : Callback<SubmitAttendanceResponse> {
                    override fun onFailure(call: Call<SubmitAttendanceResponse>, t: Throwable) {
                        activity?.let { it1 -> ToastMaker.make(it1,getString(R.string.something_went_wrong),Toast.LENGTH_LONG) }
                        Log.i("Pritish",t.message+"\t"+t.localizedMessage+"\t"+t.printStackTrace()+"\t"+t.cause+"\n"+call.request())
                        alertDialog.dismiss()
                    }

                    override fun onResponse(call: Call<SubmitAttendanceResponse>, response: Response<SubmitAttendanceResponse>) {
                        if(response.body()?.status.toString().equals("1",true)){
                            activity?.let { it1 -> ToastMaker.make(it1,response.body()?.msg.toString(),Toast.LENGTH_LONG) }
                            goToPreviousFragment()
                        } else {
                            activity?.let { it1 -> ToastMaker.make(it1,response.body()?.msg.toString(),Toast.LENGTH_LONG) }
                        }

                        alertDialog.dismiss()
                    }

                })
val jObjRequest=JsonObject()
jObjRequest.addProperty(“assign_id”,ClassModelInstance.getInstance().classInfo.assignId)
jObjRequest.addProperty(“类型”,“2”)
val attendanceArray=JsonArray()
例如(在ClassModelInstance.getInstance().StudentInfo.size之前的0中的i){
val jsonObject=jsonObject()
jsonObject.addProperty(“stud_id”,ClassModelInstance.getInstance().studentInfo[i].studId)
jsonObject.addProperty(“attendanceID”,1)
jsonObject.addProperty(“stud_Attention”,ClassModelInstance.getInstance().studentInfo[i].studAttention)
attendanceArray.add(jsonObject)
}
jObjRequest.addProperty(“考勤列表”,attendanceArray.toString())
Log.i(“PritishAttendanceApi2”,jObjRequest.toString())
val submittendanceInterface=ApiClient.client.create(submittendanceInterface::class.java)
SubmittendanceInterface.takeAttention(jObjRequest)
.enqueue(对象:回调{
覆盖失效时的乐趣(调用:调用,t:可丢弃){
活动?.let{it1->ToastMaker.make(it1,getString(R.string.something\u出错),Toast.LENGTH\u LONG)}
Log.i(“Pritish”,t.message+“\t”+t.localizedMessage+“\t”+t.printStackTrace()+“\t”+t.cause+“\n”+call.request())
alertDialog.discouse()命令
}
覆盖fun onResponse(调用:调用,响应:响应){
if(response.body()?.status.toString()等于(“1”,true)){
activity?.let{it1->ToastMaker.make(it1,response.body()?.msg.toString(),Toast.LENGTH\u LONG)}
goToPreviousFragment()
}否则{
activity?.let{it1->ToastMaker.make(it1,response.body()?.msg.toString(),Toast.LENGTH\u LONG)}
}
alertDialog.discouse()命令
}
})
这是接口和响应类

interface SubmitAttendanceInterface {

    @Headers("Content-Type: application/json")
    @POST("timetable/takeAttendance")
    fun takeAttendance(@Body body: JsonObject): Call<SubmitAttendanceResponse>

}

data class SubmitAttendanceResponse(
        @SerializedName("status")
        @Expose
        var status: Int? = null,
        @SerializedName("msg")
        @Expose
        var msg: String? = null

)
接口提交接口{
@标题(“内容类型:application/json”)
@职位(“时间表/出勤情况”)
趣味出勤(@Body:JsonObject):呼叫
}
数据类submittendanceresponse(
@序列化名称(“状态”)
@暴露
变量状态:Int?=null,
@序列化名称(“msg”)
@暴露
var msg:String?=null
)
当我使用
HttpInterceptor
登录时,我得到
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在第2行第1列路径处为字符串

我在堆栈溢出中搜索了上述错误,但答案不符合我的要求


我已经在日志中编辑了url,因为我不想公开url。

根据您的日志和示例数据,您应该将数据“考勤列表”作为json数组而不是字符串发布

试一试
jObjRequest.add(“考勤列表”,attendanceArray)
代替
jObjRequest.addProperty(“考勤列表”,attendanceArray.toString())

将httplogginginterceptor添加到改造客户端以获取网络日志call@Nudge请检查您是否为post请求使用了正确的url,并将正确的json正文发布到服务器。@ManthanPatel我正在使用它。请再读一遍我提到的问题。如果你愿意,我可以给你发日志log@Nainal我正在使用正确的url。我查过了。