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

Jetpack Compose中修改OkHttp客户端默认超时时间问题

OkHttp超时配置不生效的解决方法

问题根源

你已经通过OkHttpClient.Builder配置了30秒的超时参数,但在实际调用API时,代码里重新创建了默认的OkHttpClient()实例,完全没用到自己配置好的客户端,导致超时设置根本没生效。

修复步骤

  1. 创建可复用的配置好的OkHttpClient实例
    建议在全局作用域(比如顶层文件、ViewModel初始化块)创建一次,避免重复实例化:
import java.util.concurrent.TimeUnit
import okhttp3.OkHttpClient

// 全局复用的OkHttpClient,已配置超时
val okHttpClient = OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS) // 连接超时
    .readTimeout(30, TimeUnit.SECONDS)    // 读取超时
    .writeTimeout(30, TimeUnit.SECONDS)   // 写入超时
    .build()
  1. 在API调用中使用该配置好的客户端
    修改LaunchedEffect里的代码,替换默认客户端为上面配置的实例:
LaunchedEffect(Unit) {
    val request = Request.Builder()
        .url("https://plantwise.p.rapidapi.com/plant/?plant_type=$plantName")
        .get()
        .addHeader("X-RapidAPI-Key", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
        .addHeader("X-RapidAPI-Host", "xxxxx.rapidapi.com")
        .build()

    val response = withContext(Dispatchers.IO) {
        okHttpClient.newCall(request).execute() // 使用配置好的客户端
    }

    val responseData = response.body?.string()
    if (responseData != null) {
        plantData = gson.fromJson(responseData, PlantData::class.java)
    }
}

额外提示

  • OkHttpClient是线程安全的,全局复用能有效复用连接池,提升请求性能,避免不必要的资源消耗。
  • 如果修改后仍出现超时问题,可以检查RapidAPI的服务可用性,或者考虑给OkHttpClient添加重试拦截器,处理临时的网络波动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:24