在使用Kotlin-Flow结合Retrofit进行网络请求时,有时会出现调用失败但未抛出异常的情况。这时需要添加一个拦截器,以捕获异常并将其返回给调用者。
以下是示例代码:
class ErrorHandlingInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val response = chain.proceed(chain.request())
if (response.isSuccessful) {
return response
} else {
throw YourCustomException() // 抛出自定义异常
}
}
}
class YourCustomException : Exception()
val client = OkHttpClient.Builder()
.addInterceptor(ErrorHandlingInterceptor()) // 添加拦截器
.build()
val retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
在拦截器中,首先获取Retrofit的返回结果,如果成功返回结果,否则抛出自定义异常。在调用处使用try-catch语句捕获异常即可。
try {
val result = yourFlow.collect() // 执行网络请求
// 处理结果
} catch (e: YourCustomException) {
// 处理异常
}