fix: 处理服务端返回空body(Content-Length:0)
服务端无数据时返回200但body为空,Gson抛EOFException。 捕获EOFException视为Success(null)而非网络错误。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
package com.xiaoqu.watch.network
|
package com.xiaoqu.watch.network
|
||||||
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
import java.io.EOFException
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 安全 API 调用封装
|
* 安全 API 调用封装
|
||||||
* 将 Retrofit suspend 调用转换为 ApiResult
|
* 将 Retrofit suspend 调用转换为 ApiResult
|
||||||
|
* 处理:正常响应、业务错误、空响应、网络异常
|
||||||
*/
|
*/
|
||||||
suspend fun <T> safeApiCall(call: suspend () -> ApiResponse<T>): ApiResult<T> {
|
suspend fun <T> safeApiCall(call: suspend () -> ApiResponse<T>): ApiResult<T> {
|
||||||
return try {
|
return try {
|
||||||
@@ -15,6 +17,11 @@ suspend fun <T> safeApiCall(call: suspend () -> ApiResponse<T>): ApiResult<T> {
|
|||||||
} else {
|
} else {
|
||||||
ApiResult.Error(response.code, response.err ?: "未知错误")
|
ApiResult.Error(response.code, response.err ?: "未知错误")
|
||||||
}
|
}
|
||||||
|
} catch (e: EOFException) {
|
||||||
|
// 服务端返回 200 但 body 为空(无数据),视为成功但数据为 null
|
||||||
|
Timber.d("API 返回空响应")
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
ApiResult.Success(null as T)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.w(e, "网络请求异常")
|
Timber.w(e, "网络请求异常")
|
||||||
ApiResult.NetworkError(e)
|
ApiResult.NetworkError(e)
|
||||||
|
|||||||
Reference in New Issue
Block a user