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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *