Android平台Retrofit2不创建OkHttpClient能否设置超时?OkHttp是否为默认客户端?
问题解答
是的,Retrofit默认就是使用OkHttp作为底层HTTP客户端——哪怕你没在Retrofit.Builder里显式调用.client()传入自定义实例,Retrofit内部也会自动创建一个默认配置的OkHttpClient来处理所有网络请求。
至于设置超时必须自定义OkHttpClient的原因:Retrofit本身并没有直接暴露超时配置的API,所有网络层面的参数(包括超时、拦截器、缓存等),都需要通过底层的OkHttpClient来调整。默认的OkHttpClient用的是OkHttp的内置默认值(比如连接/读取/写入超时各10秒),如果要修改这些值,就必须自己构建一个配置好的OkHttpClient实例,再传给Retrofit。
给你一个直接能用的示例代码:
// 先构建配置好超时的OkHttpClient OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) // 连接超时30秒 .readTimeout(30, TimeUnit.SECONDS) // 读取超时30秒 .writeTimeout(30, TimeUnit.SECONDS) // 写入超时30秒 .build(); // 再把这个客户端传给Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .client(okHttpClient) // 显式传入自定义客户端 .addConverterFactory(GsonConverterFactory.create(gson)) .build();
内容的提问来源于stack exchange,提问作者Ariel Malka
相关产品推荐
相关产品推荐

