Illustration von OkHttp – (1) Erste Schritte mit OkHttp

Vorwort

  • Der in diesem Artikel enthaltene Quellcode basiert auf okhttp 3.14.9.

1. Einführung in OkHttp

  • OkHttpEs ist das am häufigsten verwendete Netzwerkanforderungsframework für die Android-Entwicklung und Squarewird vom Unternehmen als Open Source bereitgestellt.
  • Nach Android 4.4HttpURLConnection wurde die zugrunde liegende Implementierung im Quellcode ersetzt OKHttp.
  • Die unterste Ebene derzeit beliebter RetrofitFrameworks basiert ebenfalls auf OKHttpder Implementierung.
  • OkHttp4.xBereits kotlinumgesetzt.

2. Vorteile von OkHttp

  • Unterstützt Http1, Http2und QuicProtokolle WebSocket.
  • Der Verbindungspool verwendet die zugrunde liegende Schicht wieder, TCP(Socket)um die Anforderungslatenz zu reduzieren.
  • Unterstützen Sie GZIP, reduzieren Sie den Datenverkehr.
  • Das Zwischenspeichern von Antwortdaten reduziert doppelte Netzwerkanfragen.
  • Unterstützt automatische Wiederholungsversuche auf anderen IPs, wenn die Anfrage fehlschlägt.
  • Unterstützt die automatische Umleitung .

3. Grundkonfiguration

Abhängigkeitsimport

Projektimportabhängigkeiten

    implementation 'com.squareup.okhttp3:okhttp:3.14.9'
Rechteprofil

Wenn Sie es verwenden, müssen Sie AndroidManifest.xmlNetzwerknutzungsberechtigungen in der Manifestdatei konfigurieren

<uses-permission android:name="android.permission.INTERNET" />

4. OkHttp-Nutzungsprozess

okttp-Nutzungsprozess.png

Wie aus der obigen Abbildung ersichtlich ist, lauten die spezifischen Schritte zum Initiieren einer Anfrage mit OkHttp wie folgt:

  • 1 durch OkHttpClient.BuilderErstellenOkHttpClient
  • 2 durch Request.BuilderErstellenRequest
  • 3 Rufen Sie die Methode OkHttpClientdes Objekts auf newCall, übergeben Sie sie Requestund generieren Sie sieCall
  • 4 Rufen Sie eine Methode oder ein CallObjekt auf, um eine Antwort zu erhaltenexecuteenqueueResponse

5. Initiieren Sie eine Anfrage mit der Get-Methode

synchrone Anfrage
        String url="xxx";
        OkHttpClient client = new OkHttpClient.Builder().build();
        Request request = new Request.Builder().url(url).build();
        Call call = client.newCall(request);
        try {
    
    
            Response response = call.execute();
            Log.d(TAG, response.body().string());
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
Asynchrone Anfrage
        String url="xxx";
        OkHttpClient client = new OkHttpClient.Builder().build();
        Request request = new Request.Builder().url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
    
    
            @Override
            public void onFailure(Call call, IOException e) {
    
    
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
    
    
                Log.d(TAG, response.body().string());
            }
        });

6. Zusammenfassung

Aus dem obigen Prozess und den Beispielen geht hervor:

  • Beim Initiieren OkHttpeiner Anfrage gibt es im Kern drei Rollen OkHttpClient: , Requestund .Call
  • Unter ihnen OkHttpClientwerden Requestdie Erstellung und Verwendung alle durch das entsprechende Builder(klassische Builder-Entwurfsmuster ) implementiert.
  • Die Verwendung der Methode Calldes Objekts executeinitiiert eine synchrone Anfrage, während enqueuedie Methode eine asynchrone Anfrage ist .

おすすめ

転載: blog.csdn.net/qq_22255311/article/details/125375179