Scopri come utilizzare la libreria Cronet per eseguire operazioni di rete nel tuo App per Android. Cronet è lo stack di rete di Chromium reso disponibile come libreria da utilizzare nelle tue app. Per ulteriori informazioni sulle funzionalità delle librerie, consulta Eseguire operazioni di rete utilizzando Cronet.
Configurare la libreria nel progetto
Segui questi passaggi per aggiungere una dipendenza alla libreria Cronet nel tuo progetto:
Verifica che Android Studio includa un riferimento al Repository Maven di Google nel file
settings.gradle
del progetto, come mostrato di seguito esempio:Alla moda
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
Includi un riferimento alla libreria client di Google Play Services per Cronet nella sezione
dependencies
del filebuild.gradle
del modulo dell'app, come come mostrato nell'esempio seguente:Alla moda
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
oggetti creati una volta
la dipendenza viene aggiunta utilizzerà Cronet caricato da Google Play Services. Chiama
CronetProviderInstaller.installProvider(Context)
prima di creare oggetti CronetEngine
per evitare eccezioni impreviste
venga generata durante la creazione di CronetEngine
a causa di errori quali i dispositivi
richiedono una versione aggiornata di Google Play Services.
Nei casi in cui non sia possibile caricare Cronet da Google Play Services, è
un'implementazione meno efficiente dell'API Cronet che può essere utilizzata. Per utilizzare
questa implementazione di riserva, dipendono da org.chromium.net:cronet-fallback
e chiama new JavaCronetProvider(context).createBuilder()
.
Crea una richiesta di rete
Questa sezione mostra come creare e inviare una richiesta di rete utilizzando il comando Raccolta. Dopo aver inviato la richiesta di rete, l'app dovrebbe elaborare la rete risposta.
Crea e configura un'istanza di CronetEngine
La biblioteca offre
Corso CronetEngine.Builder
che puoi utilizzare per creare un'istanza
CronetEngine
. Nell'esempio che segue
mostra come creare un oggetto CronetEngine
:
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
Java
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
Puoi utilizzare il corso Builder
per configurare un
CronetEngine
, ad esempio puoi
offrono opzioni come la memorizzazione nella cache
e la compressione dei dati. Per ulteriori informazioni, vedi
CronetEngine.Builder
Fornire un'implementazione del callback della richiesta
Per fornire un'implementazione del callback, crea una sottoclasse
UrlRequest.Callback
e
implementare i metodi astratti richiesti, come mostrato nell'esempio seguente:
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."); } }
Crea un oggetto Executor per gestire le attività di rete
Puoi utilizzare la classe Executor
per eseguire la rete
attività di machine learning.
Per ottenere un'istanza di Executor
, utilizza uno dei
metodi statici della classe Executors
che restituiscono
un oggetto Executor
. L'esempio seguente mostra come creare un Executor
mediante l'attributo newSingleThreadExecutor()
:
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
Java
Executor executor = Executors.newSingleThreadExecutor();
Crea e configura un oggetto UrlRequest
Per creare la richiesta di rete, chiama il
newUrlRequestBuilder()
dell'istruzione CronetEngine
che trasmette
l'URL di destinazione, un'istanza della classe di callback e l'oggetto esecutor.
Il metodo newUrlRequestBuilder()
restituisce un
UrlRequest.Builder
che
che puoi utilizzare per creare la UrlRequest
come mostrato nell'esempio seguente:
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();
Puoi utilizzare il corso Builder
per
configurare l'istanza di UrlRequest
. Per
Ad esempio, puoi specificare una priorità o il verbo HTTP. Per ulteriori informazioni, vedi
UrlRequest.Builder
Per avviare l'attività di rete, chiama il
Metodo start()
della richiesta:
Kotlin
request.start()
Java
request.start();
Segui le istruzioni in questa sezione per creare e inviare una rete
tramite Cronet. Tuttavia, per semplicità, l'esempio
dell'implementazione
Solo UrlRequest.Callback
stampe
un messaggio nel log. La seguente sezione mostra come fornire una richiamata
che supporta scenari più utili, come l'estrazione di dati da
la risposta e rilevare un errore nella richiesta.
Elabora la risposta di rete
Una volta chiamato il start()
,
viene avviato il ciclo di vita della richiesta Cronet. L'app deve gestire
durante il ciclo di vita specificando un callback. Per saperne di più sulle
del ciclo di vita, consulta Richiesta di cronometraggio
del ciclo di vita. Puoi specificare un
creando una sottoclasse
UrlRequest.Callback
e
implementando i seguenti metodi:
onRedirectReceived()
Richiamato quando il server invia un codice di reindirizzamento HTTP in risposta al richiesta originale. Per seguire il reindirizzamento alla nuova destinazione, utilizza lo
followRedirect()
. In caso contrario, utilizza lacancel()
. L'esempio seguente mostra come implementare il metodo: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()
Richiamato quando viene ricevuto l'insieme finale di intestazioni.
onResponseStarted()
viene richiamato solo dopo aver seguito tutti i reindirizzamenti. Il seguente codice mostra un esempio di implementazione del metodo: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()
Richiamato ogni volta che una parte del corpo della risposta viene letta. Il seguente codice un esempio mostra come implementare il metodo ed estrarre il corpo della risposta:
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()
Richiamato quando la richiesta di rete viene completata correttamente. Le seguenti di esempio mostra come implementare il metodo:
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()
Richiamata se la richiesta non è andata a buon fine per qualsiasi motivo dopo il È stato chiamato il metodo
start()
. La l'esempio seguente mostra come implementare il metodo e ottenere informazioni l'errore: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()
Richiamata se la richiesta è stata annullata utilizzando il metodo
cancel()
. Una volta richiamata, altri metodi delUrlRequest.Callback
corso è richiamato. Puoi utilizzare questo metodo per liberare risorse allocate per elaborare richiesta. L'esempio seguente mostra come implementare il metodo: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. … }