You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit无法通过指定ID更新任务:API未调用且无失败回调

Retrofit更新任务API未调用问题排查

问题详情

使用Retrofit更新任务时,已成功获取到目标任务的ID(id2)并能打印正确日志,但点击更新按钮后,API请求完全未被触发,onFailure回调也没有任何日志输出。

更新按钮点击代码

val task = UpdateTask(
            taskName, taskDesc, category, dueDate, assignee, pointEarned
        )
        if (getData != null) {
            val id2 = getData.taskId
            Log.e("yes", "yes " + id2)
            GroomedKidzApi.retrofitService.updateTask(id2, makeGSONRequestBody(task))
                .enqueue(object : Callback<TasksItem?> {
                    override fun onResponse(
                        call: Call<TasksItem?>,
                        response: Response<TasksItem?>
                    ) {
                        val responseBody = response.body()
                        if (responseBody != null) {
                            Log.e("qqq", "yes " + responseBody)
                            Toast.makeText(
                                this@UpdateTaskActivity,
                                "Update Successfully",
                                Toast.LENGTH_SHORT
                            ).show()
                        }
                    }

                    override fun onFailure(call: Call<TasksItem?>, t: Throwable) {
                        Log.e("FAIL", "FAIL " + id2)
                        Toast.makeText(
                            this@UpdateTaskActivity,
                            "Update Unsuccessfully",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                })
        }

API接口定义

@Headers("Content-Type: application/json")
@PUT("api/Tasks/{id}")
fun updateTask(@Path("id") id: Int, @Body requestBody: RequestBody): Call<TasksItem>

核心疑问:updateTask(id2, makeGSONRequestBody(task)) 这种调用方式是否正确?

排查方向

  • 检查makeGSONRequestBody方法实现:确认它是否能正确将UpdateTask对象序列化为合法的JSON RequestBody,是否存在返回null的情况。如果该方法生成的RequestBody无效,Retrofit可能无法发起请求。
  • 验证Retrofit实例初始化:检查GroomedKidzApi.retrofitService的baseUrl是否配置正确,是否添加了日志拦截器(如OkHttp的HttpLoggingInterceptor),通过日志可以确认请求是否被构建、是否尝试发送。
  • 确认ID类型匹配:虽然日志显示id2值正确,但要确保id2的类型是Int,和接口定义的参数类型完全一致,避免隐性类型转换错误。
  • 添加日志拦截器:配置OkHttp的日志拦截器并设置为BODY级别,这样可以查看请求的完整详情,包括是否有请求被发出、请求体内容、是否有异常抛出。
  • 检查网络相关配置:确认应用已申请INTERNET权限,设备网络连接正常;虽然onFailure未触发,但部分网络异常可能导致请求静默失败。
  • 检查UpdateTask序列化:确认类中所有需要传递的字段都正确配置了GSON序列化注解(如@SerializedName),避免因字段不匹配导致的序列化失败(虽然这一般不会导致请求不发起,但可能影响后续排查)。
  • 确认线程调用:enqueue本身是异步执行,但要确保代码没有在异常线程环境中执行,或者存在线程阻塞的情况。

内容的提问来源于stack exchange,提问作者Alex Chong01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:23:23