小编sha*_*er_的帖子

具有协同程序错误处理的Kotlin Android Retrofit 2.6.0

我在Web服务调用中使用带有协程的Retrofit 2.6.0。我正在使用所有响应代码(成功和错误情况)正确获取API响应。我的问题是,当我断开API调用之间的互联网(Wifi /移动数据)与我编写的代码的连接时,错误无法正确捕获。大多数时候,错误是ConnectException和SocketException。

我尝试使用拦截器以及从启动我的调用的ViewModel中捕获错误。但是在这里,也不会捕获和处理异常。

//ApiService
@GET(ApiUrl.API_DASHBOARD)
    suspend fun getHomeUiDetails(@Header("Authorization") authHeader: String): Response<HomeDetailsResponse>

//ConnectionBridge
suspend fun getHomeUiDetails(authToken: String): Response<HomeDetailsResponse> {
        return ApiServiceGenerator.BASIC_CLIENT_CONTRACT.getHomeUiDetails(authToken)
    }

// ViewModel
viewModelScope.launch(Dispatchers.IO) {
   val apiResponse = ApiConnectionBridge.getHomeUiDetails(SharedPrefUtils.getAuthToken(context))
        if (apiResponse.isSuccessful) {
           // success case
        } else {
            // error case
        }
}

object ApiServiceGenerator {

    val BASIC_CLIENT_CONTRACT: ApiService = ApiClient
        .getContract(
            ApiService::class.java,
            true,
            BuildConfig.BASE_URL
        )
}

object ApiClient {

    fun <T> getContract(clazz: Class<T>, isAuth: Boolean, baseUrl: String): T {
        return getRetrofitBuilder(baseUrl, getContractBuilder(isAuth)).create(clazz)
    }

    private fun getRetrofitBuilder(baseUrl: String, builder: …
Run Code Online (Sandbox Code Playgroud)

android kotlin retrofit retrofit2

5
推荐指数
3
解决办法
1068
查看次数

标签 统计

android ×1

kotlin ×1

retrofit ×1

retrofit2 ×1