Pelajari cara menggunakan Cronet Library untuk melakukan operasi jaringan di aplikasi Android Anda. Cronet adalah stack jaringan Chromium yang disediakan sebagai library untuk Anda gunakan di aplikasi. Untuk mengetahui informasi selengkapnya tentang fitur library, lihat Menjalankan operasi jaringan menggunakan Cronet.
Menyiapkan library dalam project
Ikuti langkah-langkah berikut untuk menambahkan dependensi ke Cronet Library dalam project Anda:
Pastikan bahwa Android Studio menyertakan referensi ke Repositori Maven Google dalam file
build.gradle
tingkat teratas project Anda, seperti yang ditunjukkan dalam contoh berikut:allprojects { repositories { ... google() } }
Sertakan referensi ke Library Klien Layanan Google Play untuk Cronet di bagian
dependencies
filebuild.gradle
modul aplikasi Anda, seperti yang ditunjukkan dalam contoh berikut:dependencies { implementation 'com.google.android.gms:play-services-cronet:16.0.0' }
Objek
CronetEngine
yang dibuat setelah dependensi ini ditambahkan akan menggunakan Cronet yang dimuat dari layanan Google Play. PanggilCronetProviderInstaller.installProvider(Context)
sebelum membuat objekCronetEngine
untuk mencegah pengecualian tidak terduga dihapus saatCronetEngine
dibuat karena terjadi error seperti perangkat memerlukan versi terbaru layanan Google Play.Jika Cronet tidak dapat dimuat dari layanan Google Play, ada penerapan API Cronet dengan performa lebih rendah yang dapat digunakan. Untuk menggunakan penerapan pengganti ini, gunakan
org.chromium.net:cronet-fallback
dan panggilnew JavaCronetProvider(context).createBuilder()
.
Membuat permintaan jaringan
Bagian ini menjelaskan cara membuat dan mengirim permintaan jaringan menggunakan Cronet Library. Setelah mengirim permintaan jaringan, aplikasi Anda akan memproses respons jaringan.
Membuat dan mengonfigurasi instance CronetEngine
Library 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 objek
CronetEngine
. Misalnya, Anda dapat
memberi opsi seperti penyimpanan ke cache dan kompresi data. Untuk mengetahui informasi selengkapnya, lihat
CronetEngine.Builder
.
Menyediakan penerapan callback permintaan
Untuk menyediakan penerapan callback, buat subclass
UrlRequest.Callback
, lalu
terapkan metode abstrak yang diperlukan, seperti yang ditunjukkan dalam contoh di bawah:
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 to the read() 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. request?.read(ByteBuffer.allocateDirect(102400)) } 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 to the read() 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. request.read(ByteBuffer.allocateDirect(102400)); } @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 tugas
jaringan.
Untuk mendapatkan instance Executor
, gunakan salah satu
metode statis class Executors
yang menampilkan
objek Executor
. Contoh berikut menunjukkan cara membuat objek Executor
menggunakan metode
newSingleThreadExecutor()
:
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 executor.
Metode newUrlRequestBuilder()
menampilkan
objek UrlRequest.Builder
yang
dapat Anda gunakan untuk membuat objek 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
. Misalnya,
Anda dapat menentukan prioritas atau verb HTTP. Untuk mengetahui informasi selengkapnya, lihat
UrlRequest.Builder
.
Untuk memulai tugas jaringan, panggil
metode start()
permintaan:
Kotlin
request.start()
Java
request.start();
Dengan mengikuti petunjuk di bagian ini, Anda dapat membuat dan mengirim permintaan
jaringan menggunakan Cronet. Namun, untuk mempermudah, contoh
penerapan
UrlRequest.Callback
hanya menampilkan
pesan ke log. Bagian berikut menunjukkan cara menyediakan penerapan
callback yang mendukung skenario penting lainnya, seperti mengekstrak data dari
respons dan mendeteksi kegagalan dalam permintaan.
Memproses respons jaringan
Setelah Anda memanggil metode start()
,
siklus hidup permintaan Cronet akan dimulai. Aplikasi Anda harus mengelola
permintaan selama siklus hidupnya dengan menentukan callback. Untuk mempelajari siklus hidup
lebih lanjut, lihat Siklus hidup permintaan
Cronet. Anda dapat menentukan
callback dengan membuat subclass
UrlRequest.Callback
dan
menerapkan metode berikut:
onRedirectReceived()
Dipanggil ketika server memunculkan kode pengalihan HTTP sebagai respons terhadap permintaan awal. Untuk mengikuti pengalihan ke tujuan yang baru, gunakan metode
followRedirect()
. Atau, gunakan metodecancel()
. 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. Metode
onResponseStarted()
hanya dipanggil setelah semua pengalihan diikuti. Kode berikut menunjukkan contoh penerapan 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. Contoh kode berikut 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. Contoh berikut menunjukkan cara menerapkan 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 suatu alasan setelah metode
start()
dipanggil. Contoh berikut menunjukkan cara menerapkan metode dan mendapatkan informasi tentang error: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, metode lain dari classUrlRequest.Callback
tidak akan dipanggil. Anda dapat menggunakan metode ini guna mengosongkan resource 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. … }