En este módulo, aprenderemos cómo manejar la conectividad de red en aplicaciones Android. La capacidad de interactuar con servicios web y APIs es fundamental para muchas aplicaciones modernas. Cubriremos conceptos básicos y avanzados, desde realizar solicitudes HTTP hasta manejar respuestas JSON y XML.
Contenidos
- Introducción a la conectividad de red en Android
- Realizando solicitudes HTTP con HttpURLConnection
- Usando Retrofit para simplificar las solicitudes de red
- Manejo de respuestas JSON y XML
- Buenas prácticas y manejo de errores
- Introducción a la conectividad de red en Android
Android proporciona varias formas de realizar operaciones de red. Las más comunes son:
- HttpURLConnection: Una clase de Java estándar para realizar solicitudes HTTP.
- Retrofit: Una biblioteca de terceros que simplifica las solicitudes HTTP y el manejo de respuestas.
Conceptos clave
- API REST: Un conjunto de reglas que permiten la interacción con servicios web.
- JSON: Un formato de datos ligero y fácil de leer para el intercambio de datos.
- XML: Un formato de datos más antiguo y más verboso que JSON.
- Realizando solicitudes HTTP con HttpURLConnection
Ejemplo práctico
Vamos a realizar una solicitud GET a una API pública que devuelve datos en formato JSON.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class NetworkUtils { public static String getResponseFromHttpUrl(URL url) throws IOException { HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { InputStream in = urlConnection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder result = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { result.append(line); } return result.toString(); } finally { urlConnection.disconnect(); } } }
Explicación del código
- Abrir una conexión:
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
- Leer la respuesta: Utilizamos
BufferedReader
para leer la respuesta línea por línea. - Cerrar la conexión:
urlConnection.disconnect();
asegura que la conexión se cierre correctamente.
- Usando Retrofit para simplificar las solicitudes de red
Retrofit es una biblioteca de terceros que facilita las solicitudes HTTP y el manejo de respuestas. Es especialmente útil para trabajar con APIs RESTful.
Configuración de Retrofit
- Agregar la dependencia en build.gradle:
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
- Definir una interfaz para la API:
import retrofit2.Call; import retrofit2.http.GET; public interface ApiService { @GET("path/to/endpoint") Call<List<MyDataModel>> getData(); }
- Configurar Retrofit en tu aplicación:
import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static Retrofit retrofit = null; public static Retrofit getClient(String baseUrl) { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit; } }
Realizar una solicitud con Retrofit
Retrofit retrofit = RetrofitClient.getClient("https://api.example.com/"); ApiService apiService = retrofit.create(ApiService.class); Call<List<MyDataModel>> call = apiService.getData(); call.enqueue(new Callback<List<MyDataModel>>() { @Override public void onResponse(Call<List<MyDataModel>> call, Response<List<MyDataModel>> response) { if (response.isSuccessful()) { List<MyDataModel> data = response.body(); // Manejar los datos recibidos } } @Override public void onFailure(Call<List<MyDataModel>> call, Throwable t) { // Manejar el error } });
- Manejo de respuestas JSON y XML
JSON
Retrofit puede convertir automáticamente las respuestas JSON en objetos Java utilizando Gson.
import com.google.gson.annotations.SerializedName; public class MyDataModel { @SerializedName("id") private int id; @SerializedName("name") private String name; // Getters y Setters }
XML
Para manejar respuestas XML, puedes usar un convertidor como Simple XML.
- Buenas prácticas y manejo de errores
- Manejo de errores: Siempre maneja los errores de red adecuadamente para mejorar la experiencia del usuario.
- Operaciones en segundo plano: Realiza las operaciones de red en un hilo separado para no bloquear la interfaz de usuario.
- Seguridad: Asegúrate de usar HTTPS para proteger los datos transmitidos.
Ejercicio práctico
Objetivo: Realizar una solicitud GET a una API pública y mostrar los datos en un RecyclerView
.
- Configura Retrofit.
- Define la interfaz de la API.
- Realiza la solicitud y maneja la respuesta.
- Muestra los datos en un
RecyclerView
.
Solución
- Configura Retrofit (ver sección anterior).
- Define la interfaz de la API:
- Realiza la solicitud y maneja la respuesta:
Call<List<User>> call = apiService.getUsers(); call.enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { if (response.isSuccessful()) { List<User> users = response.body(); // Actualiza el RecyclerView con los datos } } @Override public void onFailure(Call<List<User>> call, Throwable t) { // Maneja el error } });
- Muestra los datos en un
RecyclerView
:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHolder> { private List<User> userList; public UserAdapter(List<User> userList) { this.userList = userList; } @Override public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_item, parent, false); return new UserViewHolder(view); } @Override public void onBindViewHolder(UserViewHolder holder, int position) { User user = userList.get(position); holder.nameTextView.setText(user.getName()); } @Override public int getItemCount() { return userList.size(); } public class UserViewHolder extends RecyclerView.ViewHolder { public TextView nameTextView; public UserViewHolder(View itemView) { super(itemView); nameTextView = itemView.findViewById(R.id.nameTextView); } } }
Conclusión
En esta sección, hemos aprendido cómo manejar la conectividad de red en Android utilizando HttpURLConnection
y Retrofit. También hemos visto cómo manejar respuestas JSON y XML, y hemos discutido algunas buenas prácticas para el manejo de errores y la seguridad. Con estos conocimientos, estarás preparado para integrar servicios web y APIs en tus aplicaciones Android.
Curso de Android Studio
Módulo 1: Introducción a Android Studio
- Introducción a Android Studio
- Configuración de Android Studio
- Entendiendo la interfaz de Android Studio
- Creando tu primer proyecto Android
Módulo 2: Desarrollo básico de Android
- Entendiendo la estructura del proyecto Android
- Introducción a los diseños XML
- Componentes básicos de la interfaz de usuario
- Introducción a las actividades
- Ejecutando tu aplicación en un emulador
Módulo 3: Desarrollo intermedio de Android
- Introducción a los Intents
- Trabajando con Fragmentos
- Manejo de la entrada del usuario
- Usando RecyclerView
- Redes en Android
Módulo 4: Desarrollo avanzado de Android
- Persistencia de datos con SQLite
- Usando Room para la gestión de bases de datos
- Componentes avanzados de la interfaz de usuario
- Vistas personalizadas y Canvas
- Trabajando con tareas en segundo plano
Módulo 5: Desarrollo profesional de Android
- Implementando la arquitectura MVVM
- Inyección de dependencias con Dagger
- Pruebas unitarias y pruebas de interfaz de usuario
- Publicando tu aplicación en Google Play
- Optimización del rendimiento