Unsuccessful API Call



我在Android Studio中使用API调用是相当新的,我在代码块方面遇到了麻烦。这是一个从远程数据库中删除特定任务项的函数。

这是我的代码。

RepoInterface:

suspend fun deleteRemoteTask(token: String, id: Int, task: Task): Response<Task>

RepoImplementation:

override suspend fun deleteRemoteTask(token: String, id: Int, task : Task): Response<Task> = withContext(Dispatchers.IO) {
return@withContext try {
apiService.deleteTask(token, id, task)
} catch (e: Exception) {
Log.d("TAG", "deleteRemoteTask: Api Failed to run")
throw Exception(e.localizedMessage)
}
}

存储库:

val response = remote.deleteRemoteTask(token, id, task)
if (response.isSuccessful) {
local.deleteTask(response.body()!!)
return local.getTaskByID(response.body()!!.id)
} else {
throw Exception("Repo: API Call unsuccessful")
}
}

我确信我的接口和实现是正确设置的,但是我实际存储库中的逻辑有点不稳定,因为我一直得到一个异常抛出。数据来自于视图->Viewmodel→UseCase→回购→RepoImp→界面→API。

我还有

我们需要更多的信息。这个流程没有得到很好的执行,但不用担心,我们都从一个点开始:D,我会根据这个流程调整我的答案。我们从:

开始
  • 避免!!response.body()中的非空操作符!!如果你标记了响应体不是空的,如果它是,它会崩溃,local.deleteTask应该接收一个响应体的空参数,并且应该处理可能的空体。

First the First;让我们将Repository中的完整函数包装成一个try catch,类似于:

try {
val response = remote.deleteRemoteTask(token, id, task)
if (response.isSuccessful) {
local.deleteTask(response.body()!!)
return local.getTaskByID(response.body()!!.id)
} else {
throw Exception("Repo: API Call unsuccessful")
}
} catch(e: Exception) {
throw e
}

让我们检查一下为什么响应不成功,我看到你抛出了一个带有消息的异常,如果响应不成功,尝试用response.code()抛出异常,类似于:

try {
val response = remote.deleteRemoteTask(token, id, task)
if (response.isSuccessful) {
local.deleteTask(response.body()!!)
return local.getTaskByID(response.body()!!.id)
} else {
throw Exception("Repo: API Call unsuccessful, response error code: ${response.code()}")
}
} catch(e: Exception) {
throw e
}

在您的RepoImplementation中,让我们打印异常堆栈跟踪并记录它:

override suspend fun deleteRemoteTask(token: String, id: Int, task : Task): Response<Task> = withContext(Dispatchers.IO) {
return@withContext try {
apiService.deleteTask(token, id, task)
} catch (e: Exception) {
Log.d("TAG", "deleteRemoteTask: Api Failed to run, stack trace: ${e.printStackTrace()}")
}
}

然后您可以在日志中搜索TAG并查看该响应发生了什么。告诉我进展如何:D

最新更新