Bạn có thể đặt thời gian chờ trên máy khách HTTP bên dưới. Nếu bạn không chỉ định ứng dụng khách, Retrofit sẽ tạo một ứng dụng có kết nối và đọc thời gian chờ mặc định. Để đặt thời gian chờ của riêng bạn, bạn cần định cấu hình ứng dụng khách của riêng mình và cung cấp choRestAdapter.Builder
.
Một tùy chọn là sử dụng ứng dụng khách OkHttp , cũng từ Square.
1. Thêm phụ thuộc thư viện
Trong build.gradle, bao gồm dòng này:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Trong trường hợp x.x.x
là phiên bản thư viện mong muốn.
2. Đặt máy khách
Ví dụ: nếu bạn muốn đặt thời gian chờ là 60 giây, hãy thực hiện theo cách này cho Retrofit trước phiên bản 2 và Okhttp trước phiên bản 3 ( ĐỐI VỚI PHIÊN BẢN MỚI, XEM NHỮNG BÀI VIẾT ):
public RestAdapter providesRestAdapter(Gson gson) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.build();
}
CHỈNH SỬA 1
Đối với các phiên bản okhttp kể từ đó 3.x.x
, bạn phải đặt phụ thuộc theo cách này:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
Và thiết lập ứng dụng khách bằng cách sử dụng mẫu trình xây dựng:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Thêm thông tin trong Hết giờ
CHỈNH SỬA 2
Các phiên bản trang bị thêm 2.x.x
cũng sử dụng mẫu trình xây dựng, vì vậy hãy thay đổi khối trả về ở trên thành này:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Nếu sử dụng một mã như providesRestAdapter
phương thức của tôi , thì hãy thay đổi kiểu trả về của phương thức thành Retrofit .
Thông tin thêm trong Retrofit 2 - Hướng dẫn nâng cấp từ 1.9
ps: Nếu minSdkVersion của bạn lớn hơn 8, bạn có thể sử dụng TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Để biết thêm chi tiết về các đơn vị, xem TimeUnit .