如何在Retrofit-2.0 + android中设置超时

Dev*_*ath 39 android retrofit retrofit2

我提到了这个链接,但我似乎无法为我实施

我在用

 compile 'com.squareup.retrofit2:retrofit:2.0.2'
 compile 'com.squareup.retrofit2:converter-gson:2.0.2'
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码,如何为此设置超时!

public class ApiClient {

    public static final String BASE_URL = Constants.BaseURL;
    private static Retrofit retrofit = null;

    public static Retrofit getClient() {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lan 83

配置OkHttpClient以获取超时选项.然后使用它作为客户端Retrofit.Builder.

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(20, TimeUnit.SECONDS)
    .writeTimeout(20, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();
Run Code Online (Sandbox Code Playgroud)

将此okHttpClient用于Retrofit#Builder

Retrofit.Builder()
    .client(okHttpClient);
Run Code Online (Sandbox Code Playgroud)

有关超时的官方OkHttp文档就在这里

  • 连接超时 - 与服务器建立初始连接的最长时间。写入超时 - 允许将请求数据写入(发送)到服务的最长时间。读取超时 - 等待响应的时间。@ladytoky0 希望这对你有帮助:) (2认同)

Pha*_*hai 8

尝试下面的代码,它timeout是20秒,readTimeout是30秒

 private OkHttpClient getRequestHeader() {
        OkHttpClient httpClient = new OkHttpClient();
        httpClient.setConnectTimeout(20, TimeUnit.SECONDS);
        httpClient.setReadTimeout(30, TimeUnit.SECONDS);

        return httpClient;
    }
Run Code Online (Sandbox Code Playgroud)

然后

public class ApiClient {

    public static final String BASE_URL = Constants.BaseURL;
    private static Retrofit retrofit = null;

    public static Retrofit getClient() {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(getRequestHeader())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
        }
    }
Run Code Online (Sandbox Code Playgroud)