You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用通过OkHttp3请求SQL Server数据遇EOFException问题求助

解决方案建议

1. 排查服务器端响应完整性与格式

  • 确认SQL Server存储过程的返回结果已正确转换为合法的JSON/XML结构,禁止返回空响应或格式残缺的内容。即使无数据,也要返回{"data": []}这类结构完整的响应,而非直接返回空。
  • 检查服务器接口是否正确设置Content-Length响应头,或启用分块传输编码(Transfer-Encoding: chunked)。OkHttp对响应头合法性要求严格,长度缺失或不匹配会直接导致流提前终止。
  • 验证服务器是否在响应发送完成后正常关闭连接,避免异常中断传输。

2. 优化OkHttp客户端配置与调用逻辑

  • 调整超时时间,避免因超时过早中断响应读取:
    OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .build();
    
  • 添加空响应体处理逻辑,解析前先判断响应体是否为空:
    ResponseBody body = response.body();
    if (body == null) {
        // 处理空响应场景,比如返回默认空数据集
        return Collections.emptyList();
    }
    String responseStr = body.string();
    // 后续解析逻辑
    
  • 注意body.string()只能调用一次,重复调用会导致流关闭触发EOF异常,如需多次使用请先将内容存入变量。

3. 抓包验证请求与响应细节

  • 用Charles或Wireshark抓取真机的HTTP请求包,确认:
    • 请求参数(含存储过程调用参数)是否完整发送至服务器;
    • 服务器返回的响应内容是否完整、无截断,响应头是否符合HTTP规范。

4. 排查真机网络环境

  • 确保真机网络稳定,避免在弱网环境下测试,弱网易导致响应传输中断;
  • 关闭真机的代理或VPN(若开启),部分代理工具可能篡改或截断HTTP响应。

5. 服务器端接口独立调试

  • 用Postman或curl模拟应用的请求参数调用服务器接口,若同样出现异常,说明问题出在服务器端(如存储过程逻辑错误、接口代码bug);若Postman请求正常,则重点排查OkHttp的调用逻辑。

内容的提问来源于stack exchange,提问作者theprodigy133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:37:06