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 APIPara 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";
RequestQueue mRequestQueue;
TextView tempTextView,windTextView;
double temp = 0,windSpeed = 0;
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,
url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject weather = response.getJSONObject("main"),wind = response.getJSONObject("wind");
temp = weather.getDouble("temp");
windSpeed = wind.getDouble("speed");
setValues();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mRequestQueue.add(request);
}
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!
PD: Algunos enlaces útiles para aquellos que desean comprender el problema más profundamente:La documentación oficial de la biblioteca VolleyPara una mejor comprensión de la esencia de la APITipos de solicitudes HTTPEscritura de datos en formato JSONP.SS: archivos de aplicación en GitHub