Pelajari cara menggunakan Library Cronet untuk menjalankan operasi jaringan di aplikasi Android. Cronet adalah stack jaringan Chromium yang disediakan sebagai library untuk digunakan dalam aplikasi Anda. Untuk informasi selengkapnya tentang fitur perpustakaan, lihat Menjalankan operasi jaringan menggunakan Cronet.
Menyiapkan library dalam project
Ikuti langkah-langkah berikut untuk menambahkan dependensi ke Cronet Library dalam project Anda:
Memastikan Android Studio menyertakan referensi ke Repositori Maven Google dalam file
settings.gradle
project Anda, seperti yang ditunjukkan berikut contoh:Groovy
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
Menyertakan referensi ke Library Klien Layanan Google Play untuk Cronet di bagian
dependencies
dalam filebuild.gradle
modul aplikasi Anda, sebagai yang ditunjukkan dalam contoh berikut:Groovy
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") }
Objek CronetEngine
dibuat setelah
dependensi yang ditambahkan akan menggunakan Cronet yang dimuat dari layanan Google Play. Telepon
CronetProviderInstaller.installProvider(Context)
sebelum membuat objek CronetEngine
untuk mencegah pengecualian yang tidak diharapkan
ditampilkan selama pembuatan CronetEngine
karena error seperti perangkat
memerlukan versi terbaru layanan Google Play.
Jika Cronet tidak dapat dimuat dari layanan Google Play, ada
implementasi API Cronet yang berperforma kurang baik yang dapat digunakan. Untuk menggunakan
implementasi cadangan ini, bergantung pada org.chromium.net:cronet-fallback
dan panggil new JavaCronetProvider(context).createBuilder()
.
Membuat permintaan jaringan
Bagian ini menunjukkan cara membuat dan mengirim permintaan jaringan menggunakan Cronet {i>Library<i}. Setelah mengirim permintaan jaringan, aplikasi Anda harus memproses jaringan respons.
Membuat dan mengonfigurasi instance CronetEngine
Library ini menyediakan
Class CronetEngine.Builder
yang dapat Anda gunakan untuk membuat instance
CronetEngine
. Contoh berikut
menunjukkan cara membuat objek CronetEngine
:
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
Java
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
Anda dapat menggunakan class Builder
untuk mengonfigurasi
CronetEngine
, misalnya Anda dapat
menyediakan opsi seperti {i>caching<i}
dan kompresi data. Untuk informasi selengkapnya, lihat
CronetEngine.Builder
Menyediakan penerapan callback permintaan
Untuk menyediakan implementasi callback, buat subclass dari
UrlRequest.Callback
dan
terapkan metode abstrak yang diperlukan, seperti yang ditunjukkan pada contoh berikut:
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."); } }
Membuat objek Executor untuk mengelola tugas jaringan
Anda dapat menggunakan class Executor
untuk menjalankan jaringan
tugas klasifikasi.
Untuk mendapatkan instance Executor
, gunakan salah satu metode
metode statis dari class Executors
yang ditampilkan
objek Executor
. Contoh berikut menunjukkan cara membuat Executor
menggunakan metode newSingleThreadExecutor()
berikut:
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
Java
Executor executor = Executors.newSingleThreadExecutor();
Membuat dan mengonfigurasi objek UrlRequest
Untuk membuat permintaan jaringan, panggil metode
newUrlRequestBuilder()
dari CronetEngine
yang meneruskan
URL tujuan, instance class callback, dan objek eksekutor.
Metode newUrlRequestBuilder()
akan menampilkan
UrlRequest.Builder
yang
Anda dapat menggunakan untuk membuat UrlRequest
seperti yang ditunjukkan dalam contoh berikut:
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();
Anda dapat menggunakan class Builder
untuk
mengonfigurasi instance UrlRequest
. Sebagai
misalnya, Anda dapat menentukan prioritas atau kata kerja HTTP. Untuk informasi selengkapnya, lihat
UrlRequest.Builder
Untuk memulai tugas jaringan, panggil metode
Metode start()
permintaan:
Kotlin
request.start()
Java
request.start();
Dengan mengikuti petunjuk di bagian ini, Anda dapat membuat dan mengirim permintaan
menggunakan Cronet. Namun, demi kesederhanaan, contoh
implementasi
UrlRequest.Callback
cetakan foto saja
sebuah pesan ke log. Bagian berikut menunjukkan cara memberikan callback
yang mendukung skenario yang lebih berguna, seperti mengekstrak data dari
respons dan mendeteksi
kegagalan dalam permintaan.
Memproses respons jaringan
Setelah Anda memanggil start()
, siklus proses permintaan Cronet akan dimulai. Aplikasi Anda harus mengelola
selama daur hidup dengan menentukan callback. Untuk mempelajari selengkapnya tentang
siklus proses, lihat Permintaan Cronet
siklus proses. Anda dapat menentukan
dengan membuat subclass
UrlRequest.Callback
dan
menerapkan metode berikut:
onRedirectReceived()
Dipanggil saat server mengeluarkan kode pengalihan HTTP sebagai respons terhadap permintaan awal. Untuk mengikuti pengalihan ke tujuan baru, gunakan
followRedirect()
. Jika tidak, gunakancancel()
. Contoh berikut menunjukkan cara menerapkan metode: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()
Dipanggil saat kumpulan header terakhir diterima.
onResponseStarted()
hanya dipanggil setelah semua pengalihan diikuti. Kode berikut menunjukkan contoh implementasi metode: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()
Dipanggil setiap kali isi respons telah dibaca. Kode berikut contoh menunjukkan cara menerapkan metode dan mengekstrak isi respons:
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()
Dipanggil saat permintaan jaringan berhasil diselesaikan. Hal berikut contoh ini menunjukkan cara mengimplementasikan metode:
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()
Dipanggil jika permintaan gagal karena alasan apa pun setelah Metode
start()
dipanggil. Tujuan contoh berikut menunjukkan cara mengimplementasikan metode dan mendapatkan informasi tentang {i>error<i}: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()
Dipanggil jika permintaan dibatalkan menggunakan Metode
cancel()
. Setelah dipanggil, tidak metode-metode lain dari ClassUrlRequest.Callback
dipanggil. Anda bisa menggunakan metode ini untuk membebaskan sumber daya yang dialokasikan untuk memproses permintaan. Contoh berikut menunjukkan cara menerapkan metode: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. … }