The Cat Api添加x-api-key请求时Retrofit出现SocketTimeout问题
问题解决方案
核心原因
你遇到的超时问题主要由OkHttp的超时配置不完整导致:
- 你仅配置了连接超时,未设置读取超时和写入超时,OkHttp默认读取超时仅为10秒。未携带
x-api-key时,TheCatAPI对未认证用户的limit参数有最大10条的限制,即便你传了100也只会返回10条数据,响应速度快不会触发超时;携带有效API密钥后,服务端会完整返回100条对应数据,响应时间超过10秒触发SocketTimeoutException。 - 次要排查点:确认你替换API密钥时没有保留代码示例里的
{}符号,仅填写你的纯密钥字符串即可。
修正代码
调整OkHttp的超时配置即可解决:
fun create(): CatApiService { val client = OkHttpClient.Builder() // 连接超时设置30秒即可,无需配置为10天 .connectTimeout(30, TimeUnit.SECONDS) // 新增读取超时配置,适配大体积返回数据 .readTimeout(60, TimeUnit.SECONDS) // 新增写入超时配置 .writeTimeout(30, TimeUnit.SECONDS) .addInterceptor(Interceptor { chain -> val request = chain.request().newBuilder() .addHeader("x-api-key", "你的实际API密钥,不要包含{}") .build() return@Interceptor chain.proceed(request) }) .build() return Retrofit.Builder() .baseUrl(BASE_URL) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build() .create(CatApiService::class.java) }
额外优化建议
- 不要使用
GlobalScope发起网络请求,页面销毁时请求不会自动取消,容易引发内存泄漏和崩溃,建议替换为lifecycleScope.launch绑定Activity生命周期。 - 网络请求建议添加try-catch捕获异常,避免无网、服务端异常时直接导致应用崩溃。
内容的提问来源于stack exchange,提问作者BabyishTank
相关产品推荐
相关产品推荐

