viernes, 18 de julio de 2014

Pasar un objeto entre actividades Android. Interfaz Parcelable

Para pasar un objeto definido por nosotros entre las actividades de nuestra aplicación, vamos a seguir los mismos pasos que el caso de pasar una variable del tipo básico, String, Enteros, Boleanos…

La única diferencia es que nuestro objeto debe implementar la interfaz Parcelable.

Supongamos que creamos una clase Usuario y que en nuestra aplicación es necesario pasar una instancia de este objeto entre las actividades. Nuestra clase Usuario sería la siguiente (Omito constructores, getters, setters y demás métodos para que se vea claro el ejemplo).

public class Usuario {
       private String mail;
       private String nombre;
       private int edad;
       private ArrayList<Usuario> amigos;      
}

Bien, pues para que nuestro objeto del tipo Usuario se pueda pasar mediante un Intent, es necesario que implemente la interfaz Parcelable, como se ve a continuación.


public class Usuario implements Parcelable {

       private String mail;
       private String nombre;
       private int edad;
       private ArrayList<Usuario> amigos;
   
    protected Usuario(Parcel in) {
        mail = in.readString();
        nombre = in.readString();
        edad = in.readInt();

        if (in.readByte() == 0x01) {
            amigos = new ArrayList<Usuario>();
            in.readList(amigos, Usuario.class.getClassLoader());
        } else {
            amigos = null;
        }
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(mail);
        dest.writeString(nombre);
        dest.writeInt(edad);

        if (amigos == null) {
            dest.writeByte((byte) (0x00));
        }
        else {
            dest.writeByte((byte) (0x01));
            dest.writeList(amigos);
        }
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<Usuario> CREATOR = new Parcelable.Creator<Usuario>() {
        @Override
        public Usuario createFromParcel(Parcel in) {
            return new Usuario(in);
        }

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


Os dejo el siguiente enlace mediante el que podréis acceder a una página, que os ayudará mucho en este proceso de implementar la interfaz Parcelable.

Una vez que nuestro objeto implementa la interfaz Parcelable correctamente, podemos crear un Intent de la siguiente manera.

      Usuario usuario = new Usuario();
      usuario.setNombre(nombre);
      usuario.setMail(mail);
      usuario.setEdad(edad);
      usuario.setAmigos(amigos);
       
      Intent intent = new Intent(MainActivity.this, ActividadDestino.class);
      intent.putExtra("usuario", usuario);    
      startActivity(intent);

Para recuperar el objeto en ActividadDestino realizaríamos los siguientes pasos.

        Usuario usuario = (Usuario) getIntent().getExtras().getParcelable("usuario");
      String nombre = usuario.getNombre();
      String mail = usuario.getMail();
      int edad = usuario.getEdad();
      ArrayList<Usuario> = usuario.getAmigos();

Vemos que la diferencia entre recuperar una variable básica y objeto radica en que en este último caso utilizamos el método getParcelable().

No hay comentarios:

Publicar un comentario