Erfahren Sie, wie Sie mit der Cronet-Bibliothek Netzwerkvorgänge in Ihrem Android-App Cronet ist der Chromium-Netzwerkstack, der als Bibliothek zur Verfügung gestellt wird die Sie in Ihren Apps verwenden können. Weitere Informationen zu den Funktionen der Mediathek siehe Netzwerkvorgänge mit Cronet
Bibliothek im Projekt einrichten
So fügen Sie der Cronet-Bibliothek in Ihrem Projekt eine Abhängigkeit hinzu:
Überprüfen, ob Android Studio eine Referenz auf das Maven-Repository von Google enthielt in der Datei
settings.gradle
Ihres Projekts ein, wie im Folgenden gezeigt Beispiel:Cool
dependencyResolutionManagement { ... repositories { ... google() } }
Kotlin
dependencyResolutionManagement { ... repositories { ... google() } }
Verweis auf die Clientbibliothek der Google Play-Dienste für Cronet einfügen im Abschnitt
dependencies
der Dateibuild.gradle
Ihres App-Moduls als Beispiel:Cool
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
Objekte, die danach erstellt wurden
Wenn die Abhängigkeit hinzugefügt wird, wird das aus den Google Play-Diensten geladene Cronet verwendet. Anruf
CronetProviderInstaller.installProvider(Context)
Fehler vor dem Erstellen von CronetEngine
-Objekten, um unerwartete Ausnahmen zu vermeiden
werden bei der Erstellung von CronetEngine
aufgrund von Fehlern wie Geräten nicht ausgegeben.
eine aktualisierte Version der Google Play-Dienste erforderlich.
Falls Cronet nicht aus den Google Play-Diensten geladen werden kann,
eine weniger leistungsfähige Implementierung der Cronet-API, die verwendet werden kann. Zur Verwendung
dieser Fallback-Implementierung abhängig von org.chromium.net:cronet-fallback
und rufe new JavaCronetProvider(context).createBuilder()
an.
Netzwerkanfrage erstellen
In diesem Abschnitt wird gezeigt, wie Sie mit dem Cronet-Tool eine Netzwerkanfrage erstellen und senden. Mediathek. Nach dem Senden der Netzwerkanfrage sollte Ihre App das Netzwerk verarbeiten Antwort.
CronetEngine-Instanz erstellen und konfigurieren
Die Bibliothek bietet ein
CronetEngine.Builder
Kurs
mit der Sie eine Instanz von
CronetEngine
Im folgenden Beispiel
zeigt, wie ein CronetEngine
-Objekt erstellt wird:
Kotlin
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
Java
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
Mit der Klasse Builder
können Sie Folgendes konfigurieren:
CronetEngine
-Objekt. Sie können beispielsweise
bieten Optionen wie Caching und Datenkomprimierung. Weitere Informationen finden Sie unter
CronetEngine.Builder
Implementierung des Callbacks für Anfragen bereitstellen
Um eine Implementierung des Callbacks bereitzustellen, erstellen Sie eine Unterklasse von
UrlRequest.Callback
und
Implementieren Sie die erforderlichen abstrakten Methoden, wie im folgenden Beispiel gezeigt:
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-Objekt zum Verwalten von Netzwerkaufgaben erstellen
Mit der Klasse Executor
können Sie das Netzwerk
Aufgaben.
Um eine Instanz von Executor
abzurufen, verwenden Sie eine der
der statischen Methoden der Executors
-Klasse, die
Ein Executor
-Objekt. Das folgende Beispiel zeigt, wie ein Executor
erstellt wird
mithilfe der Methode newSingleThreadExecutor()
:
Kotlin
val executor: Executor = Executors.newSingleThreadExecutor()
Java
Executor executor = Executors.newSingleThreadExecutor();
UrlRequest-Objekt erstellen und konfigurieren
Rufen Sie zum Erstellen der Netzwerkanfrage die Methode
newUrlRequestBuilder()
des CronetEngine
s, wobei der Parameter
Ziel-URL, eine Instanz Ihrer Callback-Klasse und das Executor-Objekt.
Die Methode newUrlRequestBuilder()
gibt eine
Objekt UrlRequest.Builder
, das
mit denen Sie die UrlRequest
erstellen können.
enthalten, wie im folgenden Beispiel gezeigt:
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();
Mit der Klasse Builder
können Sie
Instanz von UrlRequest
konfigurieren Für
können Sie eine Priorität oder das HTTP-Verb angeben. Weitere Informationen finden Sie unter
UrlRequest.Builder
Rufen Sie zum Starten der Netzwerkaufgabe die Methode
start()
-Methode der Anfrage:
Kotlin
request.start()
Java
request.start();
Mithilfe der Anweisungen in diesem Abschnitt können Sie ein Netzwerk erstellen und
mit Cronet. Der Einfachheit halber sollte das Beispiel
Implementierung von
Nur Abzüge im Format UrlRequest.Callback
eine Nachricht an das Protokoll. Im folgenden Abschnitt wird gezeigt, wie Sie einen Callback bereitstellen.
Implementierung, die nützlichere Szenarien unterstützt, z. B. das Extrahieren von Daten aus
um einen Fehler
in der Anfrage zu erkennen.
Netzwerkantwort verarbeiten
Wenn Sie die start()
aufrufen,
wird der Cronet-Anfragelebenszyklus initiiert. Deine App sollte die
während des Lebenszyklus
durch Angeben eines Callbacks an. Weitere Informationen zur
finden Sie unter Cronet-Anfrage
Lebenszyklus. Sie können eine
durch Erstellen einer abgeleiteten Klasse von
UrlRequest.Callback
und
Implementierung folgender Methoden:
onRedirectReceived()
Wird aufgerufen, wenn der Server einen HTTP-Weiterleitungscode als Antwort auf den ursprüngliche Anfrage. Um der Weiterleitung zum neuen Ziel zu folgen, verwenden Sie die
followRedirect()
. Andernfalls verwenden Siecancel()
. . Das folgende Beispiel zeigt, wie die Methode implementiert wird: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()
Wird aufgerufen, wenn der letzte Satz von Headern empfangen wird. Das
onResponseStarted()
wird erst aufgerufen, nachdem allen Weiterleitungen gefolgt wurde. Der folgende Code zeigt eine Beispielimplementierung der Methode: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()
Wird aufgerufen, wenn ein Teil des Antworttexts gelesen wurde. Der folgende Code Das Beispiel zeigt, wie die Methode implementiert und der Antworttext extrahiert wird:
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()
Wird aufgerufen, wenn die Netzwerkanfrage erfolgreich abgeschlossen wurde. Die folgenden Beispiel für die Implementierung der Methode:
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()
Wird aufgerufen, wenn die Anfrage nach dem Methode
start()
wurde aufgerufen. Die Das folgende Beispiel zeigt, wie Sie die Methode implementieren und Informationen zu den Fehler: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()
Wird aufgerufen, wenn die Anfrage mithilfe des
cancel()
-Methode. Nach dem Aufrufen andere Methoden derUrlRequest.Callback
Klasse ist aufgerufen wird. Mit dieser Methode können Sie Ressourcen freigeben, die zur Verarbeitung eines Das folgende Beispiel zeigt, wie die Methode implementiert wird: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. … }