martes, 5 de abril de 2011

Como java.io.Serializable

Bueno, yo poco a poco sigo con mis pequeños descubrimientos, y quiero pensar que a alguien le puede venir bien encontrarse con posts como este, que cuenta cosas que una vez sabidas parecen obvias.

Todo empezó porque un compañero del curso de Android se le ocurrió la brillante idea de serializar un objeto para pasarlo de una Activity a otra por medio de Intent. Y claro, yo quise copiarle.
Como llegué tarde a clase y además no presté atención al profesor (no leas esto Rocapal ;) ), es ahora cuando descubro cómo funciona el interfaz java.io.Serializable.

Mi clase:

public class RestaurantItem implements java.io.Serializable{
    public String mName;
    public String mDescription;
    public int mPicture;
    public Location mLocation;
}

Y después de un rato de darle vueltas he visto que si la clase tiene un atributo de un tipo no básico como "Location" no se va a poder serializar de forma automática.
He probado cambiando el Location por dos doubles:

public double mLatitude;
public double mLongitude;

y funcionaba, pero prefiero no serializar a quitar el Location :p

Por cierto, para quien quiera pasar un objeto serializado en un Intent, simplemente tiene que hacer:

Intent i = new Intent();
i.putExtra("ObjetoName", myObject);

Siendo myObject un objeto de la clase que implementa java.io.Serializable.
Y para recuperar el objeto del Intent, supuestamente en la otra Activity:

ObjSerializable obj = (ObjSerializable) i.getSerializableExtra("ObjetoName");

Y ya está.

2 comentarios:

  1. Hola, tengo un problema. Tengo una clase construida con geopoints, bitmaps y strings y algun int. Le pongo lo de implements serializable, pero cuando hago: i.putExtra("ObjetoName", myObject);
    La aplicación se cierra. Por lo que comentas veo que si tienes geopoints no funciona.Que debo hacer para serializarlo de forma no automática sin tener que pasar por descomponer los geopoints (y los bitmaps lo mismo, eso no hay forma de descomponerlo :))

    ResponderEliminar
  2. Hola gade, pues para los GeoPoints no hay nada, en todo caso habría que crearse un nuevo tipo de objeto que herede de serializable o parcelable, total, solo es Latitud y Longitud.
    Para los bitmap, se me ocurre que quizá se pueda serializar como cuando se escribe a disco, pero en lugar de disco, a un array de bytes.
    Googleando un poco he visto esto:
    http://stackoverflow.com/questions/3628016/android-how-to-save-a-bitmap-buggy-code
    Utiliza un ByteBuffer para guardar el bitmap en un buffer. No se si eso te pueda ayudar.

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...