Introduction à OkHttp
Introduction
OkHttp est une librairie Java développée par Square afin de faciliter, mais aussi d’accélérer les appels réseaux. Il respecte la norme HTTP, mais aussi HTTP/2 et SPDY, ce qui en fait aujourd’hui un outil plus performant que celui déjà présent sur Android.
Importer OkHttp
Comme pour toutes les librairies, importez OkHttp depuis votre fichier build.gradle
compile 'com.squareup.okhttp:okhttp:2.4.0'
Important : Pensez à ajouter la permission INTERNET à votre AndroidManifest
<uses-permission android:name="android.permission.INTERNET"/>
Réaliser un appel GET
Première étape, instancier un OkHttpClient
OkHttpClient okhttpClient = new OkHttpClient();
Construire ensuite sa requête GET
Request myGetRequest = new Request.Builder() .url("https://api.github.com/users/florent37") .build();
Demander ensuite à OkHttp d’éxécuter cette requête, dès que la requête est effectué, le callback.onResponse est appellé
okHttpClient.newCall(myGetRequest).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { final String text = response.body().string(); final int statusCode = response.code(); } });
Attention ! le retour dans le onSuccess n’est pas effectué dans le thread principal
Exemple complet
OkHttpClient okHttpClient = new OkHttpClient(); Request myGetRequest = new Request.Builder() .url("https://api.github.com/users/florent37") .build(); okHttpClient.newCall(myGetRequest).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { //le retour est effectué dans un thread différent final String text = response.body().string(); final int statusCode = response.code(); runOnUiThread(new Runnable() { @Override public void run() { textView.setText(text); } }); } });
Plutôt simple, non ?
Réaliser un appel POST
Pour réaliser un appel POST, par exemple pour envoyer les données d’un formulaire ou un JSON, ce n’est pas beaucoup plus compliqué, premièrement, il suffit d’ajouter un corps à votre requête avec .post(LE_CORPS)
MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8"); String myJson = "{}"; Request myGetRequest = new Request.Builder() .url("https://api.github.com/users/florent37") .post(RequestBody.create(JSON_TYPE, myJson)) .build();
L’appel s’effectue ensuite de la même façon qu’un GET
OkHttpClient okHttpClient = new OkHttpClient(); MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8"); String myJson = "{}"; //Création de la requête POST Request myGetRequest = new Request.Builder() .url("https://api.github.com/users/florent37") .post(RequestBody.create(JSON_TYPE, myJson)) .build(); okHttpClient.newCall(myGetRequest).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { //le retour est effectué dans un thread différent final String text = response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { textView.setText(text); } }); } });
Je vais m’arrêter ici pour cette courte introduction, la librairie étant assez simple à utiliser 🙂
Toutefois, si vous aimez cette librairie, je vous invite à vous rendre sur la documentation officielle.
Les sources de ce tuto sont disponibles sur github