我正在使用带有协程的改造(内置支持)。我有一个 Retrofit 接口、改造实现和由 Retrofit 创建的 API 实现,但这并不重要,因为它不会被调用。在此之前它崩溃了,这里:在XService.kt
suspend fun test() {
val mediaType = MediaType.parse("text/plain")
val requestBody = RequestBody.create(mediaType, "TEST STRING") // Crashes here
// Now make some network requests
}
由 viewModel 调用:
suspend fun test() {
return withContext(viewModelScope.coroutineContext) {
service.test()
}
}
由片段调用:
lifecycleScope.launch() { model.test() }
无用的错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: package_name, PID: 9729
I/Process: Sending signal. PID: 9729 SIG: 9
我只是不确定为什么创建一个RequestBody
会导致崩溃。奇怪的是,当调试并慢慢通过代码时,它不会崩溃......我已经简化了代码,所以它更容易阅读,但它的范围为片段而不是 VM 的原因是因为我想要根据响应更改 UI 的 Fragment。
编辑:事实证明,如果我将它包装在 try/catch 块中,崩溃的行通常不会崩溃。相反,之后的网络调用会打印出来:
I/System.out: java.net.UnknownHostException: Unable to resolve host "qats.orth.uk": No address associated with hostname
try {
val requestBody = RequestBody.create(mediaType, mode.toString())
return api.createQuiz(requestBody).createResult()
} catch (e: Exception) {
println(e)
}
所以我很困惑。为什么将它放在 try/catch 块中会改变我收到的错误消息。如果没有 try/catch,我会遇到没有堆栈跟踪的无用崩溃。我想这可能是协程的挑战。