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
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user