From 4a3fbb6be6a9dc588bf8156652c3909f2b5920f2 Mon Sep 17 00:00:00 2001 From: dongliang Date: Mon, 27 Apr 2026 21:05:58 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E8=BF=94=E5=9B=9E=E7=A9=BAbody(Content-Length:0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 服务端无数据时返回200但body为空,Gson抛EOFException。 捕获EOFException视为Success(null)而非网络错误。 Co-Authored-By: Claude Opus 4.6 (1M context) --- app/src/main/java/com/xiaoqu/watch/network/SafeApiCall.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/xiaoqu/watch/network/SafeApiCall.kt b/app/src/main/java/com/xiaoqu/watch/network/SafeApiCall.kt index 33eaaec..16ef8c8 100644 --- a/app/src/main/java/com/xiaoqu/watch/network/SafeApiCall.kt +++ b/app/src/main/java/com/xiaoqu/watch/network/SafeApiCall.kt @@ -1,10 +1,12 @@ package com.xiaoqu.watch.network import timber.log.Timber +import java.io.EOFException /** * 安全 API 调用封装 * 将 Retrofit suspend 调用转换为 ApiResult + * 处理:正常响应、业务错误、空响应、网络异常 */ suspend fun safeApiCall(call: suspend () -> ApiResponse): ApiResult { return try { @@ -15,6 +17,11 @@ suspend fun safeApiCall(call: suspend () -> ApiResponse): ApiResult { } 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)