我在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