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:
dongliang
2026-04-27 21:05:58 +09:30
parent aec33ee3e1
commit 4a3fbb6be6

View File

@@ -1,10 +1,12 @@
package com.xiaoqu.watch.network
import timber.log.Timber
import java.io.EOFException
/**
* 安全 API 调用封装
* 将 Retrofit suspend 调用转换为 ApiResult
* 处理:正常响应、业务错误、空响应、网络异常
*/
suspend fun <T> safeApiCall(call: suspend () -> ApiResponse<T>): ApiResult<T> {
return try {
@@ -15,6 +17,11 @@ suspend fun <T> safeApiCall(call: suspend () -> ApiResponse<T>): ApiResult<T> {
} else {
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) {
Timber.w(e, "网络请求异常")
ApiResult.NetworkError(e)