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

  1. 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.

  1. 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

  1. Creació de l'URL: Es crea un objecte URL amb l'URL de la sol·licitud.
  2. Obrir la Connexió: Es crea una connexió HttpURLConnection a partir de l'objecte URL.
  3. Configurar la Sol·licitud: Es configura la sol·licitud per ser de tipus GET.
  4. Obtenir la Resposta: Es llegeix la resposta del servidor i es retorna com una cadena de text.
  5. 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

  1. Afegir la Dependència: Afegir la dependència de Retrofit al fitxer build.gradle.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
  1. 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);
}
  1. Crear una Instància de Retrofit: Configurar i crear una instància de Retrofit.
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;
    }
}
  1. 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

  1. Definir l'Interfície d'API: Es defineix una interfície amb les sol·licituds HTTP.
  2. Crear la Instància de Retrofit: Es configura Retrofit amb l'URL base i el convertidor de JSON.
  3. 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

  1. Configurar Retrofit: Afegir les dependències i configurar Retrofit.
  2. Definir l'Interfície d'API: Crear una interfície per a les sol·licituds HTTP.
  3. Fer la Sol·licitud: Fer una sol·licitud GET i mostrar les dades en una RecyclerView.

Solució

  1. 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'
  1. Definir l'Interfície d'API:
import retrofit2.Call;
import retrofit2.http.GET;

public interface ApiService {
    @GET("posts")
    Call<List<Post>> getPosts();
}
  1. Crear la Instància de Retrofit:
Retrofit retrofit = RetrofitClient.getClient("https://jsonplaceholder.typicode.com/");
ApiService apiService = retrofit.create(ApiService.class);
  1. 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ó.

© Copyright 2024. Tots els drets reservats