คุณสามารถตั้งค่าการหมดเวลาบนไคลเอนต์ HTTP พื้นฐาน หากคุณไม่ระบุไคลเอนต์ Retrofit จะสร้างขึ้นใหม่พร้อมการเชื่อมต่อเริ่มต้นและหมดเวลาอ่าน ในการตั้งค่าการหมดเวลาของคุณเองคุณจะต้องกำหนดค่าไคลเอนต์ของคุณเองและส่งไปยังRestAdapter.Builder
หมดเวลาในการตั้งค่าของคุณเองคุณต้องกำหนดค่าไคลเอนต์ของคุณเองและจัดหาให้
ตัวเลือกคือการใช้ไคลเอนต์OkHttpเช่นกันจาก Square
1. เพิ่มการพึ่งพาไลบรารี
ใน build.gradle ให้รวมบรรทัดนี้:
compile 'com.squareup.okhttp:okhttp:x.x.x'
x.x.x
รุ่นไลบรารี่ที่ต้องการอยู่ที่ไหน
2. ตั้งค่าไคลเอนต์
ตัวอย่างเช่นหากคุณต้องการตั้งค่าการหมดเวลา 60 วินาทีให้ทำเช่นนี้สำหรับ Retrofit ก่อนรุ่น 2 และ Okhttp ก่อนรุ่น 3 ( สำหรับเวอร์ชั่นใหม่ให้ดูการแก้ไข ):
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();
}
แก้ไข 1
สำหรับเวอร์ชัน okhttp ตั้งแต่3.x.x
คุณต้องตั้งค่าการพึ่งพาวิธีนี้:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
และตั้งค่าไคลเอ็นต์โดยใช้รูปแบบตัวสร้าง:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
ข้อมูลเพิ่มเติมในTimeouts
แก้ไข 2
ชุดติดตั้งเพิ่มเนื่องจาก2.x.x
ใช้รูปแบบตัวสร้างด้วยดังนั้นให้เปลี่ยนบล็อกส่งคืนด้านบนเป็น:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
หากใช้รหัสเช่นprovidesRestAdapter
วิธีการของฉันให้เปลี่ยนประเภทการคืนค่าเป็นRetrofitติดตั้งเพิ่ม
ข้อมูลเพิ่มเติมในRetrofit 2 - คู่มือการอัพเกรดจาก 1.9
ps: ถ้า minSdkVersion ของคุณมากกว่า 8 คุณสามารถใช้TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับหน่วยให้ดูTIMEUNIT