Android: Intent – Passare un oggetto

Passare un oggetto tra due Activity è come spedire un pacco: non puoi infilare un intero mobile nella fessura della buca delle lettere, devi prima smontarlo.

In Android Java, hai due modi per “smontare” i tuoi oggetti:

  • Serializable (il metodo pigro)
  • Parcelable (il metodo professionale).

Serializable

Serializable è un’interfaccia standard di Java. Non devi scrivere codice, basta dire ad Android che la tua classe si può “serializzare”.

  • Come funziona: Android usa un processo chiamato Riflessione. Guarda la tua classe, capisce com’è fatta e trasforma tutto in byte automaticamente.
  • Il problema: È molto lento e consuma molta memoria (e batteria), perché Android deve “indovinare” come smontare l’oggetto ogni volta.
// Basta aggiungere "implements Serializable"
public class User implements Serializable {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Parcelable

Parcelable è l’alternativa creata da Google appositamente per Android. Qui sei tu a scrivere le “istruzioni di montaggio”.

  • Come funziona: Invece di far indovinare al sistema, tu scrivi i dati direttamente in un contenitore chiamato Parcel.
  • Perché usarlo: È fino a 10 volte più veloce di Serializable. In un’app professionale, è lo standard.
public class User implements Parcelable {
    private String name;
    private int age;

    // 1. Istruzioni per "RIMONTARE" (Constructor)
    // Leggiamo i dati dal pacco (Parcel in) nell'ordine esatto in cui li abbiamo messi
    protected User(Parcel in) {
        name = in.readString(); // Prima il nome
        age = in.readInt();     // Poi l'età
    }

    // 2. Istruzioni per "SMONTARE" (writeToParcel)
    // Scriviamo i dati dentro il pacco (Parcel dest)
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name); // Mettiamo il nome per primo
        dest.writeInt(age);     // Mettiamo l'età per seconda
    }

    // 3. L'OPERAIO (CREATOR)
    // È un oggetto statico che Android cerca per ricreare l'utente dall'altra parte
    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel in) {
            return new User(in); // Chiama il costruttore di rimontaggio
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

    @Override
    public int describeContents() { return 0; } // Quasi sempre 0
}

Come passarli nell’Intent

Il codice per spedire e ricevere l’oggetto è identico per entrambi i metodi, cambia solo il modo in cui Android lo gestisce internamente.

Invio (A)

User utente = new User("Samuele", 25);
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("CHIAVE_USER", utente); // Android capisce da solo se è Parcelable o Serializable
startActivity(intent);

Ricezione

// Se hai usato Parcelable (Consigliato)
User utente = getIntent().getParcelableExtra("CHIAVE_USER");

// Se hai usato Serializable
User utente = (User) getIntent().getSerializableExtra("CHIAVE_USER");

Riassunto

SerializableParcelable
VelocitàTartarugaGhepardo
SforzoZero (implements)Scrivere i metodi (o farli generare)

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Share via
Copy link