Utilisation de la bibliothèque Volley dans Android en utilisant les données de l'API météo comme exemple

Chaque développeur Android devra travailler avec un réseau tôt ou tard. Android possède de nombreuses bibliothèques open source, telles que Retrofit, OkHttp ou, par exemple, Volley, sur lesquelles nous nous attarderons plus en détail aujourd'hui.

À quoi ressemble cette bibliothèque?

Volley est une bibliothèque HTTP qui simplifie et accélère la mise en réseau pour les applications Android.
Code de bibliothèque GitHub .

Donc, pour commencer avec Volley, nous devons l'ajouter à build.gradle (module: app):

dependencies {
    ...
    implementation 'com.android.volley:volley:1.1.1'
}

Il est également nécessaire d'ajouter la permission d'utiliser Internet dans le manifeste de notre application:

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

Ensuite, nous avons besoin d'une API. Dans ce tutoriel, j'utiliserai l'API météo de openweathermap.org/api .

Exemple de cette API

Pour commencer, nous allons créer un balisage simple pour afficher les données issues de l'API (Interface de programmation d'application).

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tempTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=": "
        android:textSize="20sp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="50dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="50dp"
        />

    <TextView
        android:id="@+id/windTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="50dp"
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:text=" :"
        />

</RelativeLayout>

Ensuite, accédez à MainActivity et créez les champs nécessaires:

private static final String testUrl = "https://samples.openweathermap.org/data/2.5/weather?id=2172797&appid=b6907d289e10d714a6e88b30761fae22"; //url,      JSON- 
RequestQueue mRequestQueue; //  
TextView tempTextView,windTextView; //     
double temp = 0,windSpeed = 0; //      JSON

Nous initialisons les champs de champ créés dans onCreate:

tempTextView = findViewById(R.id.tempTextView);
windTextView = findViewById(R.id.windTextView);

mRequestQueue = Volley.newRequestQueue(this);

Nous arrivons maintenant au sujet principal de ce tutoriel - obtenir des données de l'API à l'aide de la bibliothèque Volley:

1) Dans MainActivity, nous créons la méthode GetWeather:

private void getWeather(String url) {
        final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, //GET - API-   
                url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONObject weather = response.getJSONObject("main"),wind = response.getJSONObject("wind"); // JSON- main  wind (   - ,   -  (JSONArray).
                    temp = weather.getDouble("temp"); 
                    windSpeed = wind.getDouble("speed");
                    //      API
                    setValues(); //   setValues    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() { //    
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mRequestQueue.add(request); //    
}

image
jsonformatter a été utilisé pour ramener json à sa forme normale .
Il convient de noter que les noms des objets doivent être écrits exactement de la même manière que dans notre API, sinon ils ne l'obtiendront tout simplement pas.

2) Créez directement la méthode setValues:

private void setValues() {
        tempTextView.setText(": " + temp);
        windTextView.setText(" : " + windSpeed);
}

3) Appelez les méthodes getWeather () et setValues ​​() dans onCreate ():

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWeather(testUrl);
        setValues();
}

4) Exécutez l'application et ... c'est fait!

image

PS: Quelques liens utiles pour ceux qui veulent mieux comprendre le problème:

La documentation officielle de la bibliothèque Volley

Pour une meilleure compréhension de l'essence de l'API

Types de requêtes HTTP

Écriture de données au format JSON

P.SS: Fichiers d'application sur GitHub

All Articles