我正在使用OkHttp库开发app,我的麻烦是我找不到如何设置连接超时和套接字超时.
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response response = client.newCall(request).execute();
谢谢.
对于Retrofit 2.0.0-beta1或beta2,代码如下
OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(30, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); client.setWriteTimeout(30, TimeUnit.SECONDS); Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.yourapp.com/") .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();
现在改变了。替换.Builder()
为.newBuilder()
从okhttp:3.9.0开始,代码如下:
OkHttpClient okHttpClient = new OkHttpClient() .newBuilder() .connectTimeout(10,TimeUnit.SECONDS) .writeTimeout(10,TimeUnit.SECONDS) .readTimeout(30,TimeUnit.SECONDS) .build();
对于Retrofit改造:2.0.0-beta4,代码如下
OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(logging) .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.yourapp.com/") .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();
对于okhttp3,这已经改变了一点.
现在您使用构建器设置时间,而不是设置器,如下所示:
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build();
更多信息可以在他们的维基中找到:https: //github.com/square/okhttp/wiki/Recipes#timeouts
你只需要这样做
OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(15, TimeUnit.SECONDS); // connect timeout client.setReadTimeout(15, TimeUnit.SECONDS); // socket timeout Request request = new Request.Builder().url(url).build(); Response response = client.newCall(request).execute();
请注意,设置的数值setReadTimeout
是用在一个setSoTimeout
对Socket
的内部OkHttp
Connection
类.
不设置任何超时OkHttpClient
相当于设置0
on setConnectTimeout
或on 的值,setReadTimeout
并且将导致根本没有超时.说明可以在这里找到.
正如@marceloquinta在评论中提到的那样setWriteTimeout
也可以设置.
从版本2.5.0开始,默认情况下,如@ChristerNordvik所述,读/写/连接超时值设置为10秒.这可以在这里看到.
从OkHttp3开始,现在可以通过Builder这样做
client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build();
您也可以在这里查看食谱
//add in gradle and sync compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.google.code.gson:gson:2.6.2' import okhttp3.OkHttpClient; import okhttp3.OkHttpClient.Builder; Builder b = new Builder(); b.readTimeout(200, TimeUnit.MILLISECONDS); b.writeTimeout(600, TimeUnit.MILLISECONDS); // set other properties OkHttpClient client = b.build();