En aquest tema, aprendrem com gestionar les operacions de xarxa en una aplicació Android. Les operacions de xarxa són essencials per a moltes aplicacions modernes, ja que permeten la comunicació amb serveis web, l'obtenció de dades remotes, l'enviament de dades a servidors, entre altres funcions.
Objectius del Tema
- Comprendre els conceptes bàsics de les operacions de xarxa en Android.
- Aprendre a utilitzar la biblioteca
HttpURLConnection
per fer sol·licituds HTTP. - Introduir la biblioteca
Retrofit
per simplificar les operacions de xarxa. - Gestionar les operacions de xarxa en fils de treball per evitar bloquejar el fil principal.
Conceptes Bàsics de Xarxes en Android
- Sol·licituds HTTP
Les sol·licituds HTTP són la base de la comunicació en xarxa en moltes aplicacions. Les sol·licituds més comunes són:
- GET: Obtenir dades d'un servidor.
- POST: Enviar dades a un servidor.
- PUT: Actualitzar dades en un servidor.
- DELETE: Eliminar dades d'un servidor.
- Fils de Treball
Les operacions de xarxa poden ser lentes i bloquejar el fil principal de l'aplicació, causant una mala experiència d'usuari. Per això, és important executar aquestes operacions en fils de treball separats.
Utilitzant HttpURLConnection
HttpURLConnection
és una classe de Java que permet fer sol·licituds HTTP. A continuació, es mostra un exemple de com fer una sol·licitud GET utilitzant HttpURLConnection
.
Exemple de Sol·licitud GET amb HttpURLConnection
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class NetworkUtils { public static String getHttpResponse(String urlString) throws Exception { URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { urlConnection.setRequestMethod("GET"); int responseCode = urlConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); return response.toString(); } else { throw new Exception("Error in connection: " + responseCode); } } finally { urlConnection.disconnect(); } } }
Explicació del Codi
- Creació de l'URL: Es crea un objecte
URL
amb l'URL de la sol·licitud. - Obrir la Connexió: Es crea una connexió
HttpURLConnection
a partir de l'objecteURL
. - Configurar la Sol·licitud: Es configura la sol·licitud per ser de tipus GET.
- Obtenir la Resposta: Es llegeix la resposta del servidor i es retorna com una cadena de text.
- Tancar la Connexió: Es tanca la connexió per alliberar recursos.
Utilitzant Retrofit
Retrofit
és una biblioteca de tercers que simplifica les operacions de xarxa en Android. Permet definir interfícies per a les sol·licituds HTTP i gestionar automàticament la conversió de dades.
Configuració de Retrofit
- Afegir la Dependència: Afegir la dependència de
Retrofit
al fitxerbuild.gradle
.
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
- Definir una Interfície d'API: Definir les sol·licituds HTTP com a mètodes d'una interfície.
import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; public interface ApiService { @GET("posts/{id}") Call<Post> getPost(@Path("id") int postId); }
- Crear una Instància de
Retrofit
: Configurar i crear una instància deRetrofit
.
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; } }
- Fer una Sol·licitud: Utilitzar la instància de
Retrofit
per fer una sol·licitud.
Retrofit retrofit = RetrofitClient.getClient("https://jsonplaceholder.typicode.com/"); ApiService apiService = retrofit.create(ApiService.class); Call<Post> call = apiService.getPost(1); call.enqueue(new Callback<Post>() { @Override public void onResponse(Call<Post> call, Response<Post> response) { if (response.isSuccessful()) { Post post = response.body(); // Processar la resposta } } @Override public void onFailure(Call<Post> call, Throwable t) { // Gestionar l'error } });
Explicació del Codi
- Definir l'Interfície d'API: Es defineix una interfície amb les sol·licituds HTTP.
- Crear la Instància de
Retrofit
: Es configuraRetrofit
amb l'URL base i el convertidor de JSON. - Fer la Sol·licitud: Es fa una sol·licitud GET per obtenir un post i es gestiona la resposta.
Exercici Pràctic
Objectiu
Crear una aplicació que faci una sol·licitud GET a una API pública i mostri les dades en una RecyclerView
.
Passos
- Configurar
Retrofit
: Afegir les dependències i configurarRetrofit
. - Definir l'Interfície d'API: Crear una interfície per a les sol·licituds HTTP.
- Fer la Sol·licitud: Fer una sol·licitud GET i mostrar les dades en una
RecyclerView
.
Solució
- Afegir les Dependències:
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'androidx.recyclerview:recyclerview:1.2.1'
- Definir l'Interfície d'API:
import retrofit2.Call; import retrofit2.http.GET; public interface ApiService { @GET("posts") Call<List<Post>> getPosts(); }
- Crear la Instància de
Retrofit
:
Retrofit retrofit = RetrofitClient.getClient("https://jsonplaceholder.typicode.com/"); ApiService apiService = retrofit.create(ApiService.class);
- Fer la Sol·licitud i Mostrar les Dades:
Call<List<Post>> call = apiService.getPosts(); call.enqueue(new Callback<List<Post>>() { @Override public void onResponse(Call<List<Post>> call, Response<List<Post>> response) { if (response.isSuccessful()) { List<Post> posts = response.body(); // Configurar la RecyclerView amb les dades } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // Gestionar l'error } });
Resum
En aquest tema, hem après com gestionar les operacions de xarxa en Android utilitzant HttpURLConnection
i Retrofit
. Hem vist com fer sol·licituds GET i com gestionar les respostes. També hem après la importància d'executar les operacions de xarxa en fils de treball separats per evitar bloquejar el fil principal de l'aplicació.
Curs d'Android Studio
Mòdul 1: Introducció a Android Studio
- Introducció a Android Studio
- Configuració d'Android Studio
- Comprensió de la Interfície d'Android Studio
- Creació del teu Primer Projecte Android
Mòdul 2: Desenvolupament Bàsic d'Android
- Comprensió de l'Estructura del Projecte Android
- Introducció als Dissenys XML
- Components Bàsics de la Interfície d'Usuari
- Introducció a les Activitats
- Executar la teva Aplicació en un Emulador
Mòdul 3: Desenvolupament Intermedi d'Android
- Introducció als Intents
- Treballar amb Fragments
- Gestió de l'Entrada de l'Usuari
- Ús de RecyclerView
- Xarxes en Android
Mòdul 4: Desenvolupament Avançat d'Android
- Persistència de Dades amb SQLite
- Ús de Room per a la Gestió de Bases de Dades
- Components Avançats de la Interfície d'Usuari
- Vistes Personalitzades i Canvas
- Treballar amb Tasques en Segon Pla
Mòdul 5: Desenvolupament Professional d'Android
- Implementació de l'Arquitectura MVVM
- Injecció de Dependències amb Dagger
- Proves Unitàries i Proves de la Interfície d'Usuari
- Publicació de la teva Aplicació a Google Play
- Optimització del Rendiment