ส่งคำขออย่างง่าย

ดูวิธีใช้ไลบรารี Cronet เพื่อดําเนินการของเครือข่ายใน แอปสำหรับ Android Cronet เป็นสแต็กเครือข่าย Chromium ที่มีให้ใช้งานเป็นไลบรารี เพื่อให้คุณใช้ในแอป สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ไลบรารี ดูดำเนินการของเครือข่ายโดยใช้ Cronet

ตั้งค่าไลบรารีในโปรเจ็กต์ของคุณ

ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มทรัพยากร Dependency ไปยังไลบรารี Cronet ในโปรเจ็กต์

  1. ยืนยันว่า Android Studio มีการอ้างอิงถึงที่เก็บ Maven ของ Google ในไฟล์ settings.gradle ของโครงการ ตามที่แสดงไว้ดังต่อไปนี้ ตัวอย่าง:

    ดึงดูด

    dependencyResolutionManagement {
       ...
       repositories {
           ...
           google()
       }
    }
    

    Kotlin

    dependencyResolutionManagement {
       ...
       repositories {
           ...
           google()
       }
    }
    
  2. เพิ่มการอ้างอิงไปยังไลบรารีของไคลเอ็นต์บริการ 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.
  
}