Einfache Anfrage senden

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:

  1. Ü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()
       }
    }
    
  2. Verweis auf die Clientbibliothek der Google Play-Dienste für Cronet einfügen im Abschnitt dependencies der Datei build.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 CronetEngines, 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 Sie cancel(). . 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 der UrlRequest.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.
  
}