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