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

Windows平台Android Studio模拟器使用Retrofit+OkHttp出现unexpected end of stream报错

问题根因

该问题和OkHttp、Retrofit、服务端配置均无关,是Windows平台的Android Studio官方模拟器自带的网络栈实现BUG,仅在Windows系统运行官方模拟器时触发,Mac/Linux版模拟器、真机、其他HTTP客户端均不会复现该问题。你此前尝试的修改请求头、调整超时、修改连接池配置、调整服务端响应头等操作都无法解决问题,因为这些操作都是针对HTTP协议层的优化,无法修复模拟器底层网络栈的缓冲区数据丢失缺陷。

可行解决方案
  • 方案1:开发调试阶段若无需使用OkHttp的自定义拦截器、超时配置等扩展功能,直接移除Retrofit构造时的.client(client)配置即可解决问题,使用Retrofit默认生成的OkHttpClient即可避开该BUG。
  • 方案2:如果必须保留自定义OkHttpClient配置,可新增一个全局拦截器,一次性读取完整响应体后再封装返回,避免分块读取时出现字符丢失问题,示例代码如下:
val fullBodyInterceptor = Interceptor { chain ->
    val originalResponse = chain.proceed(chain.request())
    val fullBody = originalResponse.body?.bytes()?.let {
        ResponseBody.create(originalResponse.body?.contentType(), it)
    }
    originalResponse.newBuilder()
        .body(fullBody)
        .build()
}
// 把这个拦截器添加到OkHttpClient的拦截器列表最前面
val client = OkHttpClient.Builder()
    .addInterceptor(fullBodyInterceptor)
    // 保留其他原有配置
    .build()
  • 方案3:调试阶段直接使用物理真机,或者Genymotion等第三方模拟器,完全避开官方Windows模拟器的网络缺陷。
  • 生产环境无需做额外适配:该问题仅存在于Windows版的Android Studio官方开发模拟器,真实用户的安卓设备不会触发该问题,不会影响线上用户使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:02