即使在正确响应之后,Retrofit 的 onFailure 方法也会被调用

英式

以下是我在 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 应用程序中,我使用 Retrofit 和 Gson。但是通过 Gson,我遇到了一些问题,所以我以jsonObjectand 的形式发送请求参数jsonArrays

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

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()
                    }

                })

这是接口和响应类

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

)

当我使用登录时,HttpInterceptor我得到com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path

我在 Stack Overflow 上搜索了上述错误,但答案不符合我的要求

JSON 错误“java.lang.IllegalStateException:预期为 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING”

“应为 BEGIN_OBJECT,但在第 1 行第 1 列处为 STRING”

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

曼森帕特尔

根据您的日志和示例数据,您应该将数据“attendance_list”发布为字符串的 json 数组

尝试jObjRequest.add("attendance_list",attendanceArray)插入jObjRequest.addProperty("attendance_list",attendanceArray.toString())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Retrofit-Callback.onFailure被调用

onFailure方法中的OkHttp响应状态代码

在systemd中使用OnFailure的正确方法

Rest API 进入 onFailure() 方法问题-retrofit2

响应代码422转到onFailure方法

Retrofit 2.0 OnFailure-原始响应

Retrofit 2 总是返回 onFailure

即使没有调用方法,mockito never()也会被调用吗?

在Android中解析JSON数据时,响应转到onFailure方法

在Kafka Send()方法的Onfailure()方法调用中获取对象值

无法调用Ajax.BeginForm的OnFailure函数

LoopJ AndroidAsyncHttp在OnFailure中返回响应

世界时间API调用触发onFailure而不是onSuccess

onFailure:无法调用无参数的公共okhttp3.RequestBody()

当数据输入不正确时,改造转到 onFailure

即使没有子类覆盖它,方法实际上也会被调用吗?

为什么即使窗口小部件不可见,State的build()方法仍会被调用?

即使地图刚刚移动,onLocationChanged 也会被调用

WL.Client.Logout不调用其onSuccess或onFailure回调吗?

NSFetchedResultsControllerDelegate方法不会被调用

即使设备没有移动,onLocationChanged()也会被调用太多次

在CBCentralManager初始化centralManagerDidUpdateState之后,它不会被调用

改造 + GSON = 输入“onFailure”

尝试调用任何工作灯适配器Android时发生EventTransmitterPiggybacker.onFailure(EventTransmitterPiggybacker.java:68)

OkHttpClient成功从API检索数据,但在入队列onFailure时在Kotlin Android应用程序中调用

标有@AssertTrue的方法不会被调用

JAXB的ValidationEventHandler的handleEvent方法不会被调用

onOptionsItemSelected()方法不会被调用的片段

覆盖的equals方法不会被调用