En este módulo, aprenderemos cómo manejar la comunicación en red y el almacenamiento de datos en aplicaciones Android utilizando Kotlin. Estos son componentes esenciales para cualquier aplicación moderna que necesite interactuar con servicios web y almacenar información de manera persistente.
Contenido
- Introducción a la Comunicación en Red
- Realizando Solicitudes HTTP
- Parseo de Respuestas JSON
- Almacenamiento Local con SharedPreferences
- Uso de Bases de Datos con Room
- Ejercicios Prácticos
- Introducción a la Comunicación en Red
La comunicación en red es fundamental para aplicaciones que necesitan interactuar con servicios web. En Android, esto se puede lograr utilizando bibliotecas como Retrofit y OkHttp.
Conceptos Clave
- HTTP (HyperText Transfer Protocol): Protocolo utilizado para la comunicación entre clientes y servidores.
- API (Application Programming Interface): Conjunto de reglas que permiten la interacción entre diferentes sistemas de software.
- Realizando Solicitudes HTTP
Retrofit es una biblioteca popular para realizar solicitudes HTTP en Android. Facilita la creación de solicitudes y el manejo de respuestas.
Configuración de Retrofit
-
Agregar Dependencias:
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
-
Crear una Interfaz de API:
interface ApiService { @GET("posts") suspend fun getPosts(): List<Post> }
-
Configurar Retrofit:
val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val apiService = retrofit.create(ApiService::class.java)
Ejemplo Práctico
data class Post(val userId: Int, val id: Int, val title: String, val body: String) suspend fun fetchPosts() { val posts = apiService.getPosts() posts.forEach { println(it) } }
- Parseo de Respuestas JSON
Gson es una biblioteca que facilita la conversión entre JSON y objetos Kotlin.
Ejemplo de Parseo
val json = """ [ {"userId": 1, "id": 1, "title": "Post 1", "body": "Content 1"}, {"userId": 1, "id": 2, "title": "Post 2", "body": "Content 2"} ] """ val posts: List<Post> = Gson().fromJson(json, object : TypeToken<List<Post>>() {}.type) posts.forEach { println(it) }
- Almacenamiento Local con SharedPreferences
SharedPreferences es una forma sencilla de almacenar datos clave-valor.
Uso de SharedPreferences
val sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE) val editor = sharedPreferences.edit() // Guardar datos editor.putString("username", "JohnDoe") editor.apply() // Recuperar datos val username = sharedPreferences.getString("username", null) println(username)
- Uso de Bases de Datos con Room
Room es una biblioteca de persistencia que proporciona una capa de abstracción sobre SQLite.
Configuración de Room
-
Agregar Dependencias:
implementation "androidx.room:room-runtime:2.3.0" kapt "androidx.room:room-compiler:2.3.0"
-
Definir Entidades:
@Entity data class User( @PrimaryKey val uid: Int, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String? )
-
Crear DAO:
@Dao interface UserDao { @Query("SELECT * FROM user") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) }
-
Configurar la Base de Datos:
@Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build()
Ejemplo Práctico
val userDao = db.userDao() // Insertar usuarios userDao.insertAll(User(1, "John", "Doe")) // Obtener usuarios val users = userDao.getAll() users.forEach { println(it) }
- Ejercicios Prácticos
Ejercicio 1: Realizar una Solicitud HTTP
Objetivo: Crear una aplicación que realice una solicitud HTTP para obtener una lista de posts y los muestre en un RecyclerView.
Ejercicio 2: Almacenamiento con SharedPreferences
Objetivo: Crear una pantalla de configuración donde el usuario pueda guardar y recuperar su nombre de usuario utilizando SharedPreferences.
Ejercicio 3: Uso de Room para Almacenamiento de Datos
Objetivo: Crear una aplicación que permita al usuario agregar, listar y eliminar contactos utilizando Room.
Conclusión
En esta sección, hemos aprendido cómo manejar la comunicación en red y el almacenamiento de datos en aplicaciones Android utilizando Kotlin. Estos conocimientos son fundamentales para desarrollar aplicaciones robustas y eficientes. En el próximo módulo, exploraremos las mejores prácticas y temas avanzados para optimizar y asegurar nuestras aplicaciones.
Curso de Programación en Kotlin
Módulo 1: Introducción a Kotlin
- Introducción a Kotlin
- Configuración del Entorno de Desarrollo
- Conceptos Básicos de Kotlin: Variables y Tipos de Datos
- Flujo de Control: Condicionales y Bucles
- Funciones y Lambdas
Módulo 2: Programación Orientada a Objetos en Kotlin
- Clases y Objetos
- Herencia e Interfaces
- Modificadores de Visibilidad
- Clases de Datos y Clases Selladas
- Declaraciones de Objetos y Objetos Compañeros
Módulo 3: Características Avanzadas de Kotlin
- Colecciones y Genéricos
- Funciones de Extensión
- Funciones de Orden Superior y Programación Funcional
- Corrutinas y Programación Asíncrona
- DSL (Lenguaje Específico de Dominio) en Kotlin
Módulo 4: Kotlin para Desarrollo Android
- Introducción al Desarrollo Android con Kotlin
- Construcción de Interfaces de Usuario
- Manejo de Entrada del Usuario
- Redes y Almacenamiento de Datos
- Pruebas y Depuración