ดูวิธีใช้ไลบรารี Cronet เพื่อดําเนินการของเครือข่ายใน แอปสำหรับ Android Cronet เป็นสแต็กเครือข่าย Chromium ที่มีให้ใช้งานเป็นไลบรารี เพื่อให้คุณใช้ในแอป สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ไลบรารี ดูดำเนินการของเครือข่ายโดยใช้ Cronet
ตั้งค่าไลบรารีในโปรเจ็กต์ของคุณ
ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มทรัพยากร Dependency ไปยังไลบรารี Cronet ในโปรเจ็กต์
ยืนยันว่า Android Studio มีการอ้างอิงถึงที่เก็บ Maven ของ Google ในไฟล์
settings.gradle
ของโครงการ ตามที่แสดงไว้ดังต่อไปนี้ ตัวอย่าง:ดึงดูด
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
เพิ่มการอ้างอิงไปยังไลบรารีของไคลเอ็นต์บริการ Google Play สำหรับ Cronet ในส่วน
dependencies
ของไฟล์build.gradle
ของโมดูลแอป ตาม ที่แสดงในตัวอย่างต่อไปนี้ดึงดูด
dependencies { implementation 'com.google.android.gms:play-services-cronet:18.0.1' }
Kotlin
dependencies { implementation("com.google.android.gms:play-services-cronet:18.0.1") }
ออบเจ็กต์ CronetEngine
รายการที่สร้างขึ้นเมื่อดำเนินการนี้
การเพิ่มทรัพยากร Dependency จะใช้ Cronet ที่โหลดจากบริการ Google Play โทร
CronetProviderInstaller.installProvider(Context)
ก่อนสร้างออบเจ็กต์ CronetEngine
เพื่อป้องกันข้อยกเว้นที่ไม่คาดคิด
ไม่ถูกโยนระหว่างการสร้าง CronetEngine
เนื่องจากข้อผิดพลาด เช่น อุปกรณ์
จำเป็นต้องใช้บริการ Google Play เวอร์ชันอัปเดต
ในกรณีที่ไม่สามารถโหลด Cronet จากบริการ Google Play ได้
การติดตั้งใช้งาน API ของ Cronet ที่มีประสิทธิภาพลดลง หากต้องการใช้งาน
การใช้งานสำรองนี้ ซึ่งขึ้นอยู่กับ org.chromium.net:cronet-fallback
และโทรหา new JavaCronetProvider(context).createBuilder()
สร้างคำขอเครือข่าย
ส่วนนี้จะแสดงวิธีสร้างและส่งคำขอเครือข่ายโดยใช้ Cronet คลัง หลังจากส่งคำขอเครือข่ายแล้ว แอปของคุณควรประมวลผลเครือข่าย คำตอบ
สร้างและกำหนดค่าอินสแตนซ์ของ CronetEngine
ห้องสมุดจะมี
ชั้นเรียน CronetEngine.Builder
ที่คุณสามารถใช้เพื่อสร้างอินสแตนซ์
CronetEngine
ตัวอย่างต่อไปนี้
แสดงวิธีสร้างออบเจ็กต์ CronetEngine
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
Java
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
คุณสามารถใช้คลาส Builder
เพื่อกำหนดค่า
CronetEngine
ตัวอย่างเช่นคุณสามารถ
ให้ตัวเลือกต่างๆ เช่น การแคชและการบีบอัดข้อมูล สำหรับข้อมูลเพิ่มเติม โปรดดู
CronetEngine.Builder
แสดงการใช้งาน Callback ของคำขอ
หากต้องการให้มีการใช้งาน Callback ให้สร้างคลาสย่อยของ
UrlRequest.Callback
และ
ให้ใช้วิธีเชิงนามธรรมที่จําเป็นดังที่แสดงในตัวอย่างต่อไปนี้
Kotlin
private const val TAG = "MyUrlRequestCallback" class MyUrlRequestCallback : UrlRequest.Callback() { override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { Log.i(TAG, "onRedirectReceived method called.") // You should call the request.followRedirect() method to continue // processing the request. request?.followRedirect() } override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onResponseStarted method called.") // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request?.read(ByteBuffer.allocateDirect(102400)) } override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { Log.i(TAG, "onReadCompleted method called.") // You should keep reading the request until there's no more data. byteBuffer.clear() request?.read(byteBuffer) } override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onSucceeded method called.") } }
Java
class MyUrlRequestCallback extends UrlRequest.Callback { private static final String TAG = "MyUrlRequestCallback"; @Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { Log.i(TAG, "onRedirectReceived method called."); // You should call the request.followRedirect() method to continue // processing the request. request.followRedirect(); } @Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onResponseStarted method called."); // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request.read(ByteBuffer.allocateDirect(102400)); } @Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { Log.i(TAG, "onReadCompleted method called."); // You should keep reading the request until there's no more data. byteBuffer.clear(); request.read(byteBuffer); } @Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onSucceeded method called."); } }
สร้างออบเจ็กต์ของ Executor เพื่อจัดการงานของเครือข่าย
คุณใช้คลาส Executor
เพื่อเรียกใช้เครือข่ายได้
งาน
หากต้องการรับอินสแตนซ์ของ Executor
ให้ใช้รายการใดรายการหนึ่ง
เมธอดแบบคงที่ของคลาส Executors
ที่แสดงผล
ออบเจ็กต์ Executor
ตัวอย่างต่อไปนี้แสดงวิธีสร้าง Executor
ออบเจ็กต์ที่ใช้ newSingleThreadExecutor()
วิธีการ:
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
Java
Executor executor = Executors.newSingleThreadExecutor();
สร้างและกำหนดค่าออบเจ็กต์ UrlRequest
ในการสร้างคำขอเครือข่าย ให้เรียกเมธอด
newUrlRequestBuilder()
ของ CronetEngine
ที่ส่งผ่าน
URL ปลายทาง อินสแตนซ์ของคลาส Callback และออบเจ็กต์ผู้ดำเนินการ
เมธอด newUrlRequestBuilder()
แสดงผล
UrlRequest.Builder
ออบเจ็กต์ที่
คุณสามารถใช้เพื่อสร้าง UrlRequest
ตามที่แสดงในตัวอย่างต่อไปนี้
Kotlin
val requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", MyUrlRequestCallback(), executor ) val request: UrlRequest = requestBuilder.build()
Java
UrlRequest.Builder requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", new MyUrlRequestCallback(), executor); UrlRequest request = requestBuilder.build();
คุณสามารถใช้ชั้นเรียน Builder
เพื่อ
กำหนดค่าอินสแตนซ์ของ UrlRequest
สำหรับ
ตัวอย่างเช่น คุณสามารถระบุลำดับความสำคัญหรือคำกริยา HTTP สำหรับข้อมูลเพิ่มเติม โปรดดู
UrlRequest.Builder
หากต้องการเริ่มงานของเครือข่าย ให้เรียกใช้
วิธีคำขอ start()
รายการ:
Kotlin
request.start()
Java
request.start();
คุณจะสร้างและส่งเครือข่ายได้โดยทำตามคำแนะนำในส่วนนี้
โดยใช้ Cronet แต่เพื่อความเรียบง่าย ตัวอย่าง
การใช้งาน
รูปอัดขนาด UrlRequest.Callback
เท่านั้น
ข้อความลงในบันทึก ส่วนต่อไปนี้จะแสดงวิธีให้การติดต่อกลับ
ซึ่งสนับสนุนสถานการณ์ที่มีประโยชน์มากขึ้น เช่น การดึงข้อมูลจาก
การตอบกลับและตรวจพบความล้มเหลวในคำขอ
ประมวลผลการตอบสนองของเครือข่าย
เมื่อโทรหา start()
วงจรคำขอ Cronet จะเริ่มต้น แอปของคุณควรจัดการ
ในระหว่างวงจรโดยการระบุ Callback หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ
วงจรการใช้งาน โปรดดูคำขอ Cronet
วงจร คุณสามารถระบุ
Callback โดยการสร้างคลาสย่อยของ
UrlRequest.Callback
และ
โดยใช้วิธีการต่อไปนี้
onRedirectReceived()
มีการเรียกใช้เมื่อเซิร์ฟเวอร์ออกรหัสการเปลี่ยนเส้นทาง HTTP เพื่อตอบสนองต่อคำสั่ง คำขอเดิม หากต้องการติดตามการเปลี่ยนเส้นทางไปยังปลายทางใหม่ ให้ใช้
followRedirect()
หรือใช้cancel()
ตัวอย่างต่อไปนี้แสดงวิธีการใช้งานKotlin
override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { // Determine whether you want to follow the redirect. ... if (shouldFollow) { request?.followRedirect() } else { request?.cancel() } }
Java
@Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { // Determine whether you want to follow the redirect. … if (shouldFollow) { request.followRedirect(); } else { request.cancel(); } }
onResponseStarted()
เรียกใช้เมื่อได้รับชุดส่วนหัวสุดท้าย
onResponseStarted()
มีการเรียกใช้หลังจากติดตามการเปลี่ยนเส้นทางทั้งหมดแล้วเท่านั้น รหัสต่อไปนี้ แสดงตัวอย่างการใช้เมธอด:Kotlin
override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { val httpStatusCode = info?.httpStatusCode if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request?.read(myBuffer) } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request?.read(myBuffer) } responseHeaders = info?.allHeaders }
Java
@Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { int httpStatusCode = info.getHttpStatusCode(); if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request.read(myBuffer); } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request.read(myBuffer); } responseHeaders = info.getAllHeaders(); }
onReadCompleted()
เรียกใช้เมื่อมีการอ่านส่วนหนึ่งของเนื้อหาการตอบกลับ รหัสต่อไปนี้ ตัวอย่างแสดงวิธีนำเมธอดไปใช้และดึงเนื้อหาของการตอบกลับออกมา
Kotlin
override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { // The response body is available, process byteBuffer. ... // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer?.clear() request?.read(myBuffer) }
Java
@Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { // The response body is available, process byteBuffer. … // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer.clear(); request.read(myBuffer); }
onSucceeded()
เรียกใช้เมื่อคำขอเครือข่ายเสร็จสมบูรณ์ ดังต่อไปนี้ ตัวอย่าง แสดงวิธีนำวิธีการไปใช้:
Kotlin
override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { // The request has completed successfully. }
Java
@Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { // The request has completed successfully. }
onFailed()
เรียกใช้หากคำขอล้มเหลวด้วยเหตุผลใดก็ตามหลังจาก มีการเรียกเมธอด
start()
แล้ว ตัวอย่างต่อไปนี้จะแสดงวิธีนำวิธีการไปใช้ และรับข้อมูลเกี่ยวกับ ข้อผิดพลาด:Kotlin
override fun onFailed(request: UrlRequest?, info: UrlResponseInfo?, error: CronetException?) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error) }
Java
@Override public void onFailed(UrlRequest request, UrlResponseInfo info, CronetException error) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error); }
onCanceled()
เรียกใช้หากคำขอถูกยกเลิกโดยใช้
cancel()
เมื่อเรียกใช้ ไม่ได้ วิธีการอื่นๆ ชั้นเรียนUrlRequest.Callback
เรียกใช้ คุณสามารถใช้เมธอดนี้เพื่อทำให้ทรัพยากรว่างที่จัดสรรเพื่อประมวลผล อีกครั้ง ตัวอย่างต่อไปนี้แสดงวิธีการใช้งานKotlin
override fun onCanceled(request: UrlRequest?, info: UrlResponseInfo?) { // Free resources allocated to process this request. ... }
Java
@Override public void onCanceled(UrlRequest request, UrlResponseInfo info) { // Free resources allocated to process this request. … }