Apprenez à utiliser la bibliothèque Cronet pour effectuer des opérations réseau dans votre Application Android. Cronet est la pile réseau Chromium mise à disposition en tant que bibliothèque à utiliser dans vos applications. Pour en savoir plus sur les fonctionnalités de la bibliothèque, consultez la section Effectuer des opérations réseau à l'aide de Cronet :
Configurer la bibliothèque dans votre projet
Pour ajouter une dépendance à la bibliothèque Cronet dans votre projet, procédez comme suit:
Vérifier qu'Android Studio a inclus une référence au dépôt Maven de Google dans le fichier
settings.gradle
de votre projet, comme illustré ci-dessous Exemple:Groovy
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
Inclure une référence à la bibliothèque cliente des services Google Play pour Cronet dans la section
dependencies
du fichierbuild.gradle
de votre module d'application, en tant que illustré dans l'exemple suivant: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") }
CronetEngine
objets créés après cette opération
utilise Cronet chargé à partir des services Google Play. Appeler
CronetProviderInstaller.installProvider(Context)
Avant de créer des objets CronetEngine
pour éviter les exceptions inattendues
générées lors de la création de CronetEngine
en raison d'erreurs telles que des appareils
nécessitant une version mise à jour
des services Google Play.
Dans les cas où Cronet ne peut pas être chargé depuis les services Google Play,
une implémentation moins performante de l'API de Cronet qui peut être utilisée. Pour utiliser
cette implémentation de remplacement, dépendent de org.chromium.net:cronet-fallback
et appelez new JavaCronetProvider(context).createBuilder()
.
Créer une requête réseau
Cette section explique comment créer et envoyer une requête réseau à l'aide de Cronet Bibliothèque. Après l'envoi de la requête réseau, votre application doit traiter le réseau réponse.
Créer et configurer une instance de CronetEngine
La bibliothèque fournit
Classe CronetEngine.Builder
que vous pouvez utiliser pour créer une instance
CronetEngine
L'exemple suivant
montre comment créer un objet CronetEngine
:
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
Java
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
Vous pouvez utiliser la classe Builder
pour configurer un
objet CronetEngine
. Vous pouvez par exemple
fournissent des options telles que la mise
en cache et la compression des données. Pour en savoir plus, consultez
CronetEngine.Builder
Fournir une implémentation du rappel de la requête
Pour fournir une implémentation du rappel, créez une sous-classe de
UrlRequest.Callback
et
implémenter les méthodes abstraites requises, comme illustré dans l'exemple suivant:
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."); } }
Créer un objet Executor pour gérer les tâches réseau
Vous pouvez utiliser la classe Executor
pour exécuter le réseau
tâches.
Pour obtenir une instance de Executor
, utilisez l'une des
les méthodes statiques de la classe Executors
qui renvoient
un objet Executor
. L'exemple suivant montre comment créer un Executor
à l'aide de newSingleThreadExecutor()
méthode:
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
Java
Executor executor = Executors.newSingleThreadExecutor();
Créer et configurer un objet UrlRequest
Pour créer la requête réseau, appelez la méthode
newUrlRequestBuilder()
de la méthode CronetEngine
qui transmet
l'URL de destination, une instance de votre classe de rappel et l'objet exécuteur.
La méthode newUrlRequestBuilder()
renvoie une
Un objet UrlRequest.Builder
qui
que vous pouvez utiliser pour créer le UrlRequest
, comme illustré dans l'exemple suivant:
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();
Vous pouvez utiliser la classe Builder
pour :
configurer l'instance de UrlRequest
. Pour
exemple, vous pouvez spécifier une priorité ou le verbe HTTP. Pour en savoir plus, consultez
UrlRequest.Builder
Pour lancer la tâche réseau, appelez la méthode
start()
de la requête:
Kotlin
request.start()
Java
request.start();
En suivant les instructions de cette section, vous pouvez créer et envoyer un réseau
à l'aide de Cronet. Toutefois, par souci de simplicité, l'exemple
la mise en œuvre
UrlRequest.Callback
imprime uniquement
un message dans le journal. La section suivante montre comment fournir un rappel
une implémentation compatible avec des scénarios plus utiles, comme l'extraction de données
la réponse et en détectant
l'échec de la requête.
Traiter la réponse du réseau
Une fois que vous avez appelé la méthode start()
, le cycle de vie d'une requête Cronet est lancé. Votre application doit gérer
pendant le cycle de vie en spécifiant un rappel. Pour en savoir plus sur la
du cycle de vie de la requête, consultez la section Requête Cronet
cycle de vie. Vous pouvez spécifier un
en créant une sous-classe de
UrlRequest.Callback
et
en implémentant les méthodes suivantes:
onRedirectReceived()
Appelée lorsque le serveur émet un code de redirection HTTP en réponse à la requête d'origine. Pour suivre la redirection vers la nouvelle destination, utilisez la
followRedirect()
. Sinon, utilisezcancel()
. . L'exemple suivant montre comment implémenter la méthode: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()
Invoqué lors de la réception de l'ensemble final d'en-têtes.
onResponseStarted()
n'est appelée que lorsque toutes les redirections sont suivies. Le code suivant montre un exemple d'implémentation de la méthode: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()
Invoqué chaque fois qu'une partie du corps de la réponse a été lue. Le code suivant Cet exemple montre comment implémenter la méthode et extraire le corps de la réponse:
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()
Invoqué lorsque la requête réseau a bien été exécutée. Les éléments suivants : L'exemple suivant montre comment implémenter la méthode:
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()
Appelée si la requête a échoué pour une raison quelconque après le La méthode
start()
a été appelée. La L'exemple suivant montre comment implémenter la méthode et obtenir des informations sur l'erreur: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()
Appelée si la requête a été annulée à l'aide de la méthode
cancel()
. Une fois appelé, aucune d'autres méthodesUrlRequest.Callback
sont invoquée. Cette méthode vous permet de libérer les ressources allouées au traitement d'une requête. L'exemple suivant montre comment implémenter la méthode: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. … }