Retrofit2.0 這個網路請求框架使用了很久了,最近一次出現一個小插曲。 有一個介面,返回的數據量因為業務的原因 會返回很大的數據量,此時網路不大好的情況下,會出現請求失敗的情況 也就是回調了 onFaileure()方法,測試一下,大概都在10秒就會回調這個方法。 去後臺驗證,發現數據請求成 ...
Retrofit2.0 這個網路請求框架使用了很久了,最近一次出現一個小插曲。
有一個介面,返回的數據量因為業務的原因 會返回很大的數據量,此時網路不大好的情況下,會出現請求失敗的情況
也就是回調了 onFaileure()方法,測試一下,大概都在10秒就會回調這個方法。
去後臺驗證,發現數據請求成功,獲取成功,也就是不是數據的問題,那問題就在於請求的數據量過大導致請求沒有10秒內處理成功的話就會請求失敗。
解決辦法就是給請求框架設置一個連接超時時間
// Retrofit 網路數據請求 public static RetrofitAPI Retrofit() { if (retrofitAPI == null) { retrofitAPI = new Retrofit.Builder() .baseUrl(ApkManager.baseUrl) .addConverterFactory(GsonConverterFactory.create()) .client(genericClient()) .build() .create(RetrofitAPI.class); } return retrofitAPI; } public static String date = "000000"; //記錄版本發佈時間 public static OkHttpClient genericClient() { OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request() .newBuilder() .addHeader("User-Agent", "Magikare/Therapist/"+date) .build(); return chain.proceed(request); } }).connectTimeout(30, TimeUnit.SECONDS). // 設置連接超時時間 readTimeout(30, TimeUnit.SECONDS). writeTimeout(30, TimeUnit.SECONDS).build(); return httpClient; }