如何使用协程处理网络异常?

时间:2020-05-19 06:38:39

标签: android kotlin kotlin-coroutines

我尝试使用协程处理异常。我写了这样的代码,但是没有用。除了使用try-catch之外,我看不到任何日志。我不想在所有功能上都使用try catch,但是想要使干净的代码处理异常。我该怎么办?

viewmodel

    private val handler = CoroutineExceptionHandler { _, exception ->
        when (exception) {
            is UnknownHostException -> {
               showLog("login UnknownHostException : " +exception.message)
            }
            else -> {

            }
        }
    }

    fun login(mobile:String){
        viewModelScope.launch(handler) {
            try{
               var login = apiRepository.login(mobile)
               _isLogin.value = login
            }catch(e:Exception){
            }
        }
    }

存储库

    override suspend fun login(mobile: String): LoginResultData {
        var result =LoginResultData()
        withContext(ioDispatcher){
            val request = apiServerModel.login(mobile)
            val response = request.await()
            result = response
        }
        return  result
    }

1 个答案:

答案 0 :(得分:0)

fun login(mobile:String){
    viewModelScope.launch(handler) {
        val login = apiRepository.login(mobile)
        _isLogin.value = login
    }
}