En aquest tema, aprendrem com gestionar la comunicació de xarxa i l'emmagatzematge de dades en aplicacions Android utilitzant Kotlin. Aquestes habilitats són essencials per crear aplicacions que interactuen amb serveis web i emmagatzemen dades localment.
Continguts
- Introducció a la Xarxa en Android
- Realització de Peticions HTTP
- Gestió de Respostes HTTP
- Emmagatzematge de Dades amb SharedPreferences
- Emmagatzematge de Dades amb Bases de Dades SQLite
- Utilització de Room per a Bases de Dades
- Introducció a la Xarxa en Android
La comunicació de xarxa és una part fonamental de moltes aplicacions mòbils. En Android, podem utilitzar diverses biblioteques per realitzar peticions de xarxa, com ara HttpURLConnection
, OkHttp
, i Retrofit
.
Conceptes Clau
- Peticions HTTP: GET, POST, PUT, DELETE
- JSON: Format comú per a l'intercanvi de dades
- Biblioteques de Xarxa:
HttpURLConnection
,OkHttp
,Retrofit
- Realització de Peticions HTTP
Exemple amb HttpURLConnection
import java.net.HttpURLConnection import java.net.URL fun makeGetRequest(url: String): String { val url = URL(url) val connection = url.openConnection() as HttpURLConnection connection.requestMethod = "GET" connection.connect() val responseCode = connection.responseCode if (responseCode == HttpURLConnection.HTTP_OK) { val inputStream = connection.inputStream return inputStream.bufferedReader().use { it.readText() } } else { throw Exception("HTTP error code: $responseCode") } }
Exemple amb OkHttp
import okhttp3.OkHttpClient import okhttp3.Request fun makeGetRequestWithOkHttp(url: String): String { val client = OkHttpClient() val request = Request.Builder() .url(url) .build() client.newCall(request).execute().use { response -> if (!response.isSuccessful) throw IOException("Unexpected code $response") return response.body?.string() ?: "" } }
- Gestió de Respostes HTTP
Parseig de JSON amb Gson
import com.google.gson.Gson data class User(val id: Int, val name: String, val email: String) fun parseJsonResponse(json: String): User { val gson = Gson() return gson.fromJson(json, User::class.java) }
- Emmagatzematge de Dades amb SharedPreferences
Guardar i Recuperar Dades
import android.content.Context import android.content.SharedPreferences fun saveData(context: Context, key: String, value: String) { val sharedPreferences: SharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE) val editor = sharedPreferences.edit() editor.putString(key, value) editor.apply() } fun getData(context: Context, key: String): String? { val sharedPreferences: SharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE) return sharedPreferences.getString(key, null) }
- Emmagatzematge de Dades amb Bases de Dades SQLite
Creació i Gestió d'una Base de Dades
import android.content.Context import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { override fun onCreate(db: SQLiteDatabase) { val createTable = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)" db.execSQL(createTable) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.execSQL("DROP TABLE IF EXISTS users") onCreate(db) } companion object { private const val DATABASE_NAME = "app.db" private const val DATABASE_VERSION = 1 } }
- Utilització de Room per a Bases de Dades
Configuració de Room
import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } @Entity data class User( @PrimaryKey val id: Int, val name: String, val email: String ) @Dao interface UserDao { @Query("SELECT * FROM user") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) }
Inicialització de la Base de Dades
val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build()
Exercicis Pràctics
- Realitzar una Petició GET: Utilitza
HttpURLConnection
oOkHttp
per fer una petició GET a una API pública i mostrar la resposta en unTextView
. - Guardar i Recuperar Dades: Crea una aplicació que permeti als usuaris guardar i recuperar dades utilitzant
SharedPreferences
. - Base de Dades amb Room: Crea una aplicació que utilitzi Room per emmagatzemar i recuperar informació d'usuaris.
Solucions
Exercici 1: Realitzar una Petició GET
// Implementació de la petició GET amb OkHttp val response = makeGetRequestWithOkHttp("https://jsonplaceholder.typicode.com/users/1") textView.text = response
Exercici 2: Guardar i Recuperar Dades
// Guardar dades saveData(context, "username", "JohnDoe") // Recuperar dades val username = getData(context, "username") textView.text = username
Exercici 3: Base de Dades amb Room
// Inserir dades val userDao = db.userDao() userDao.insertAll(User(1, "John Doe", "[email protected]")) // Recuperar dades val users = userDao.getAll() textView.text = users.joinToString { it.name }
Conclusió
En aquesta secció, hem après com gestionar la comunicació de xarxa i l'emmagatzematge de dades en aplicacions Android utilitzant Kotlin. Hem explorat com realitzar peticions HTTP, parsejar respostes JSON, i emmagatzemar dades utilitzant SharedPreferences
i bases de dades SQLite amb Room. Aquestes habilitats són fonamentals per desenvolupar aplicacions mòbils robustes i eficients.
Curs de Programació en Kotlin
Mòdul 1: Introducció a Kotlin
- Introducció a Kotlin
- Configuració de l'Entorn de Desenvolupament
- Conceptes Bàsics de Kotlin: Variables i Tipus de Dades
- Flux de Control: Condicionals i Bucles
- Funcions i Lambdas
Mòdul 2: Programació Orientada a Objectes en Kotlin
- Classes i Objectes
- Herència i Interfícies
- Modificadors de Visibilitat
- Classes de Dades i Classes Segellades
- Declaracions d'Objectes i Objectes Companys
Mòdul 3: Funcions Avançades de Kotlin
- Col·leccions i Genèrics
- Funcions d'Extensió
- Funcions d'Ordre Superior i Programació Funcional
- Coroutines i Programació Asíncrona
- DSL (Llenguatge Específic de Domini) en Kotlin
Mòdul 4: Kotlin per al Desenvolupament d'Android
- Introducció al Desenvolupament d'Android amb Kotlin
- Construcció d'Interfícies d'Usuari
- Gestió de l'Entrada de l'Usuari
- Xarxes i Emmagatzematge de Dades
- Proves i Depuració