Usando la biblioteca Volley en Android usando datos de la API del clima como ejemplo

Cada desarrollador de Android tendrá que trabajar con una red tarde o temprano. Android tiene muchas bibliotecas de código abierto, como Retrofit, OkHttp o, por ejemplo, Volley, que analizaremos con más detalle hoy.

Entonces, ¿cómo es esta biblioteca?

Volley es una biblioteca HTTP que simplifica y acelera la creación de redes para aplicaciones de Android.
Código de la biblioteca de GitHub .

Entonces, para comenzar con Volley, necesitamos agregarlo a build.gradle (módulo: aplicación):

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

También es necesario agregar permiso para usar Internet en el manifiesto de nuestra aplicación:

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

Luego necesitamos una API. En este tutorial, usaré la API del clima de openweathermap.org/api .

Ejemplo de esta API

Para comenzar, crearemos un marcado simple para mostrar los datos tomados de la API (interfaz de programación de aplicaciones).

<?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>

A continuación, vaya a MainActivity y cree los campos necesarios:

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

Inicializamos los campos de campo creados en onCreate:

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

mRequestQueue = Volley.newRequestQueue(this);

Ahora llegamos al tema principal de este tutorial: obtener datos de la API utilizando la biblioteca Volley:

1) En MainActivity, cree el método 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); //    
}

imagen
jsonformatter se usó para llevar a json a su forma normal .
Vale la pena señalar que los nombres de los objetos deben escribirse exactamente de la misma manera que en nuestra API, de lo contrario simplemente no lo obtendrán.

2) Crear, directamente, el método setValues:

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

3) Llame a los métodos getWeather () y setValues ​​() en onCreate ():

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

        getWeather(testUrl);
        setValues();
}

4) Ejecute la aplicación y ... ¡listo!

imagen

PD: Algunos enlaces útiles para aquellos que desean comprender el problema más profundamente:

La documentación oficial de la biblioteca Volley

Para una mejor comprensión de la esencia de la API

Tipos de solicitudes HTTP

Escritura de datos en formato JSON

P.SS: archivos de aplicación en GitHub

All Articles