Vorwort
- Der in diesem Artikel enthaltene Quellcode basiert auf
okhttp 3.14.9
.
1. Einführung in OkHttp
OkHttp
Es ist das am häufigsten verwendete Netzwerkanforderungsframework für die Android-Entwicklung undSquare
wird vom Unternehmen als Open Source bereitgestellt.- Nach Android 4.4
HttpURLConnection
wurde die zugrunde liegende Implementierung im Quellcode ersetztOKHttp
. - Die unterste Ebene derzeit beliebter
Retrofit
Frameworks basiert ebenfalls aufOKHttp
der Implementierung. OkHttp4.x
Bereitskotlin
umgesetzt.
2. Vorteile von OkHttp
- Unterstützt
Http1
,Http2
undQuic
ProtokolleWebSocket
. - 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.xml
Netzwerknutzungsberechtigungen in der Manifestdatei konfigurieren
<uses-permission android:name="android.permission.INTERNET" />
4. OkHttp-Nutzungsprozess
Wie aus der obigen Abbildung ersichtlich ist, lauten die spezifischen Schritte zum Initiieren einer Anfrage mit OkHttp wie folgt:
- 1 durch
OkHttpClient.Builder
ErstellenOkHttpClient
- 2 durch
Request.Builder
ErstellenRequest
- 3 Rufen Sie die Methode
OkHttpClient
des Objekts aufnewCall
, übergeben Sie sieRequest
und generieren Sie sieCall
- 4 Rufen Sie eine Methode oder ein
Call
Objekt auf, um eine Antwort zu erhaltenexecute
enqueue
Response
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
OkHttp
einer Anfrage gibt es im Kern drei RollenOkHttpClient
: ,Request
und .Call
- Unter ihnen
OkHttpClient
werdenRequest
die Erstellung und Verwendung alle durch das entsprechendeBuilder
(klassische Builder-Entwurfsmuster ) implementiert. - Die Verwendung der Methode
Call
des Objektsexecute
initiiert eine synchrone Anfrage, währendenqueue
die Methode eine asynchrone Anfrage ist .