MST

星途 面试题库

面试题:Kotlin Android协程中如何处理网络请求的异常

在使用Kotlin Android协程进行网络请求时,比如使用Retrofit库结合协程发起请求,通常会遇到网络异常、服务器返回错误等情况。请描述如何在协程中优雅地捕获并处理这些异常,给出相关代码示例。
16.3万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

在Kotlin Android协程中使用Retrofit结合协程发起网络请求时,可以通过try-catch块来捕获异常。

  1. 定义Retrofit接口
interface ApiService {
    @GET("your_api_endpoint")
    suspend fun getResponse(): Response<YourResponseType>
}
  1. 创建Retrofit实例
val retrofit = Retrofit.Builder()
   .baseUrl("https://your_base_url/")
   .addConverterFactory(GsonConverterFactory.create())
   .build()

val apiService = retrofit.create(ApiService::class.java)
  1. 发起网络请求并处理异常
GlobalScope.launch {
    try {
        val response = apiService.getResponse()
        if (response.isSuccessful) {
            val result = response.body()
            // 处理成功的响应
        } else {
            // 处理服务器返回的错误,比如404, 500等
            Log.e("TAG", "Server error: ${response.code()}")
        }
    } catch (e: IOException) {
        // 处理网络异常,如网络不可用等
        Log.e("TAG", "Network error: ${e.message}")
    } catch (e: HttpException) {
        // 处理HTTP相关的异常
        Log.e("TAG", "Http error: ${e.message}")
    } catch (e: Exception) {
        // 处理其他未知异常
        Log.e("TAG", "Unexpected error: ${e.message}")
    }
}

上述代码展示了如何在Kotlin协程中使用Retrofit发起网络请求,并通过try-catch块捕获网络异常、HTTP异常以及其他可能出现的异常。根据具体的异常类型,我们可以进行相应的处理,比如提示用户网络问题,或者根据服务器返回的错误码进行特定的处理。

注意:GlobalScope.launch 这里只是一个简单示例,实际开发中可能需要根据场景使用合适的 CoroutineScope,如 viewModelScope 等。