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
HttpURLConnectionoOkHttpper 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 = responseExercici 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", "john@example.com"))
// 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ó
