Příklad OkHttp pro Android

OkHttp představuje spolehlivou a oblíbenou knihovnu pro HTTP komunikaci v prostředí Android. Nabízí intuitivní rozhraní pro vytváření požadavků typu GET, POST a dalších, a současně umožňuje detailní konfiguraci a rozšíření pro náročnější scénáře. Tento návod vás provede od základních principů použití OkHttp v Androidu až po pokročilé postupy, včetně správy mezipaměti a modifikace požadavků pomocí interceptorů.

1. Základní implementace HTTP požadavku

Nejjednodušší způsob, jak realizovat HTTP požadavek za pomoci OkHttp, spočívá v použití objektů OkHttpClient a Request:


OkHttpClient klient = new OkHttpClient();


Request pozadavek = new Request.Builder()
.url("https://www.google.com/")
.build();


try (Response odpoved = klient.newCall(pozadavek).execute()) {
if (odpoved.isSuccessful()) {
String teloOdpovedi = odpoved.body().string();
// Zpracování dat z odpovědi
} else {
// Obsluha chyby v požadavku
}
} catch (IOException e) {
// Obsluha chyby síťového připojení
}

Tento fragment kódu inicializuje OkHttpClient, který funguje jako výchozí klient pro HTTP komunikaci. Následně vytvoří Request objekt pro specifikovanou URL adresu. Poté pomocí metody client.newCall(request).execute() odešle synchronní požadavek. Odpověď je zpracována uvnitř bloku try-catch a v případě úspěchu je získán textový obsah odpovědi skrze response.body().string().

2. Konfigurace OkHttpClient

OkHttpClient lze dále konfigurovat pomocí builderu. Můžeme specifikovat časové limity, nastavení proxy serveru, certifikátů a další parametry:


OkHttpClient klient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();

Tento příklad nastaví časový limit pro navázání spojení a čtení dat na 10 sekund. Můžete rovněž přidávat další konfigurace, jako například retryOnConnectionFailure(true) pro automatické opakování neúspěšných požadavků.

3. Použití Interceptorů

Interceptery umožňují zasahovat do průběhu zpracování požadavků a odpovědí. Zde je příklad:


OkHttpClient klient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request pozadavek = chain.request();
// Úprava požadavku před odesláním
Response odpoved = chain.proceed(pozadavek);
// Úprava odpovědi po přijetí
return odpoved;
}
})
.build();

Tento kód přidává interceptor, který se spustí před a po každém HTTP požadavku. Umožňuje například úpravu hlaviček požadavků, přidávání dotazovacích parametrů, nebo úpravu obsahu odpovědi před jejím předáním aplikaci.

4. Správa Mezipaměti

OkHttp poskytuje jednoduchý mechanismus pro implementaci mezipaměti, což pomáhá optimalizovat komunikaci. Můžete použít Cache objekt z java.net.Cache nebo si vytvořit vlastní řešení:


Cache mezipamet = new Cache(new File(getCacheDir(), "http-mezipamet"), 10 * 1024 * 1024);


OkHttpClient klient = new OkHttpClient.Builder()
.cache(mezipamet)
.build();

Tento kód vytvoří mezipaměť o velikosti 10 MB v adresáři aplikace. OkHttp automaticky využívá mezipaměť pro ukládání a načítání odpovědí, pokud je to možné.

5. Autentizace

OkHttp podporuje rozličné způsoby autentizace, včetně základní autentizace, OAuth 2.0 a JWT. Základní autentizace se implementuje přidáním hlavičky Authorization do požadavku:


Request pozadavek = new Request.Builder()
.url("https://example.com/api")
.addHeader("Authorization", "Basic " + Base64.encodeToString((uzivatelskeJmeno + ":" + heslo).getBytes(), Base64.NO_WRAP))
.build();

6. Pokročilé Funkce

OkHttp nabízí další pokročilé možnosti:

  • WebSocket: Podpora pro WebSocket protokoly pro obousměrnou komunikaci v reálném čase.
  • HTTP/2: Optimalizace pro HTTP/2 protokol pro vyšší rychlost a efektivitu.
  • SSL/TLS: Podpora pro šifrované HTTPS spojení pro bezpečnou komunikaci.
  • Asynchronní operace: Asynchronní provedení požadavků pro zlepšení výkonu aplikace.

Závěrem

OkHttp je komplexní a efektivní knihovna pro HTTP požadavky v Androidu, umožňující snadné vytváření základních i složitých implementací. Pro optimalizaci chování vaší aplikace doporučujeme využít možnosti konfigurace klienta, interceptory a mezipaměť.

Často kladené otázky (FAQ)

1. Co je OkHttp a jak funguje?

OkHttp je HTTP klient pro Android a Javu. Zajišťuje veškerou komunikaci mezi aplikací a webovým serverem, včetně sestavování požadavků a zpracování odpovědí.

2. Jaké jsou hlavní výhody OkHttp?

OkHttp vyniká svou rychlostí, spolehlivostí a jednoduchostí použití. Nabízí širokou škálu funkcí jako mezipaměť, interceptory a podporu protokolu HTTP/2.

3. Kdy je vhodné použít OkHttp?

OkHttp je vhodný pro jakoukoli aplikaci, která komunikuje s webovými službami, stahuje soubory, streamuje data, nebo obecně provádí HTTP požadavky.

4. Jak nainstalovat OkHttp do projektu?

OkHttp se přidává do projektu pomocí Gradle:


implementation("com.squareup.okhttp3:okhttp:4.9.0")

5. Jak provést GET požadavek pomocí OkHttp?

Použijte Request.Builder() a nastavte metodu na GET:


Request pozadavek = new Request.Builder()
.url("https://www.google.com/")
.get()
.build();

6. Jak provést POST požadavek pomocí OkHttp?

Použijte Request.Builder() a nastavte metodu na POST:


Request pozadavek = new Request.Builder()
.url("https://www.example.com/api")
.post(RequestBody.create(MediaType.parse("application/json"), jsonBody))
.build();

7. Jak zpracovat chyby v OkHttp?

Chyby v OkHttp se řeší v bloku try-catch. Je možné zkontrolovat stav odpovědi nebo případnou výjimku IOException pro bližší informace.

8. Jak přidat hlavičku do požadavku v OkHttp?

Hlavičky se přidávají pomocí metody addHeader():


Request pozadavek = new Request.Builder()
.url("https://www.google.com/")
.addHeader("User-Agent", "Moje Aplikace")
.build();

9. Jak přidat parametry do URL v OkHttp?

Parametry se přidávají přímo do URL pomocí metody url():


Request pozadavek = new Request.Builder()
.url("https://www.example.com/api?param1=hodnota1&param2=hodnota2")
.build();

10. Jak upravit chování OkHttp pro specifické požadavky?

Pro specifické požadavky můžete použít interceptory a přizpůsobit proces odesílání požadavků a zpracování odpovědí.

Klíčová slova: OkHttp, Android, HTTP, API, požadavky, odpovědi, mezipaměť, autentizace, interceptory, WebSocket, HTTP/2, SSL/TLS, asynchronní operace, vývoj mobilních aplikací

Užitečné odkazy:

* OkHttp dokumentace
* Úvod do OkHttp
* Interceptery v OkHttp
* Mezipaměť v OkHttp
* Autentizace v OkHttp