Android协程处理异常

时间:2019-05-31 13:40:29

标签: android kotlin coroutine

在我的应用中。我正在尝试使用 Kotlin Coroutines 发送网络请求。我分析了响应并在某些情况下抛出异常。这是代码:

class ProxyErrorInterceptor : Interceptor {

override fun intercept(chain: Interceptor.Chain): Response {
    val request = chain.request()
    val response = chain.proceed(request)
    val bodyString = response.body()?.string()
    when (response.code()) {
        HttpURLConnection.HTTP_OK -> {
            val error = Gson().fromJson(bodyString, BusinessModel::class.java)
            if (error.errorCode != null) {
                throw BusinessDataException(error.errorCode, error.errorMessage)
            }
        }
        HttpURLConnection.HTTP_INTERNAL_ERROR -> {
            val error = Gson().fromJson(bodyString, BusinessModel::class.java)
            if (error.errorCode != null) {
                throw BusinessDataException(error.errorCode, error.errorMessage)
            }
        }
    }
    return response.newBuilder()
            .body(ResponseBody.create(response.body()?.contentType(), bodyString)).build()
}

}

此拦截例外。

fun getAccounts() {
    try {
        val myJob = GlobalScope.launch(Dispatchers.IO) {
            val response = interactor.getAccounts()
            launch(Dispatchers.Default) {
                data.postValue(mapper.mapAccountList(response))
            }
        }
    } catch (e: Exception) {
        Log.d("Проверка", e.message)
    }
}

但是这没有解决,最后我的应用崩溃了。

1 个答案:

答案 0 :(得分:0)

我相信loadingStatus.progress.set(false)是问题所在。在主线程中未执行该操作,这可能会引发异常。每当您更新UI时,请使用Dispatchers.MAIN而不是Dispatchers.Default