【问题标题】:How can I set connection timeout in Retrofit library for Android?如何在 Android 的 Retrofit 库中设置连接超时?
【发布时间】:2017-02-19 17:04:15
【问题描述】:

我为我的 Android 应用程序使用了 Retrofit 库。我需要将连接超时设置为 120 秒。我能怎么做 ?

版本:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

OperatingApiClient:

    public class OperatingApiClient {
    public static final String BASE_URL = "http://172.16.2.39/";
    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;
    }
    }

TargetFileApi接口:

public interface TargetFileApiInterface {
@GET("NNGOperating/GetTargetFileList")
Call<TargetFileApiResponse> getTargetFileList(@Query("api_key") 
String apiKey);

}

TargetFileApiResponse:

    public class TargetFileApiResponse {
    @SerializedName("TargetFileList")
    private List<TargetFile> targetfileslist;

    public TargetFileApiResponse(List<TargetFile> targetfileslist) {
        this.targetfileslist = targetfileslist;
    }

    public List<TargetFile> getTargetfileslist() {
        return targetfileslist;
    }

    public void setTargetfileslist(List<TargetFile> targetfileslist) {
        this.targetfileslist = targetfileslist;
    }
    }

【问题讨论】:

    标签: android retrofit retrofit2


    【解决方案1】:

    您可以为 OkHttp 设置配置

    OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(yourTime, TimeUnit.SECONDS)
            .writeTimeout(yourTime, TimeUnit.SECONDS)
            .readTimeout(yourTime, TimeUnit.SECONDS)
            .build();
    

    之后,设置客户端进行改造

    retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(client)
                        .build();
    

    【讨论】:

      【解决方案2】:

      它正在工作。

      public class OperatingApiClient {
          public static final String BASE_URL = "http://172.16.2.39/";
          private static Retrofit retrofit = null;
      
      
          public static Retrofit getClient() {
              if (retrofit==null) {
                  retrofit = new Retrofit.Builder()
                          .baseUrl(BASE_URL)
                          .client(okHttpClient)
                          .addConverterFactory(GsonConverterFactory.create())
                          .build();
              }
              return retrofit;
          }
      
          public static OkHttpClient okHttpClient = new OkHttpClient.Builder()
                  .readTimeout(120, TimeUnit.SECONDS)
                  .connectTimeout(120, TimeUnit.SECONDS)
                  .build();
      
      }
      

      【讨论】:

        【解决方案3】:

        尝试以下方法,为您的改造构建器设置 httpClient。

        OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
        .readTimeout(60, TimeUnit.SECONDS)
        .connectTimeout(60, TimeUnit.SECONDS); // I am using 60 seconds you can user your own
        
        
         public static Retrofit getClient() {
                if (retrofit==null) {
                    retrofit = new Retrofit.Builder()
                            .baseUrl(BASE_URL)
                            .addConverterFactory(GsonConverterFactory.create())
                            .client(httpClient.build())  //setting your custom client
                            .build();
                }
                return retrofit;
            }
        

        【讨论】:

          猜你喜欢
          • 2016-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-12
          • 2017-04-21
          • 1970-01-01
          • 2016-06-09
          • 2018-12-19
          相关资源
          最近更新 更多