2009-10-10 16 views
5

Hola tengo un problema con una clase quiero pasar en un intento por ponerlo en el putExtras() Su serializable y el código es el siguiente:androide: Problema con objeto Serializable puesto en la intención

public abstract class ObjectA extends ArrayList<ObjectA> implements java.io.Serializable{...} 

public class ObjectB extends ObjectA {...} 


... 
Bundle extras = new Bundle(); 
extras.putSerializable("blabla", ObjectB); 
intent.putExtras(extras); 

... 

Object y = getIntent().getExtras().get("blabla"); 

el problema es, que y ahora es un ArrayList y ya no es una ObjectB así que no puedo echarlo .. si cambio el código para

public class ObjectB implements java.io.Serializable {...} 

funciona bien

+0

Solo por curiosidad, ¿qué es "un intento" en este contexto? –

+0

ok acabo de agregar la etiqueta de Android (nuevamente), una intención es una cosa interna de Android –

+0

Ah. ¡Gracias! 15 personajes! ¡Woot! –

Respuesta

14

Mediante la implementación tanto java.util.List y java.io.Serializable en su clase que ha desencadenado esta android bug.

+0

Creo que tropecé con el mismo problema: si meto un LinkedList en un paquete a través de putSerializable, cuando intento obtenerlo por getSerializable, recibo un ArrayList. ¿No es así? – superjos

+0

Sí, parece formar LinkedLists en Serializables en múltiples circunstancias. – jjb

+0

Error de 2009, todavía aquí 3 años después :( – mbritto

0

Sospecho que lo que está sucediendo es que, dado que no declaras que ObjectB es serializable, está "retrocediendo" al objeto principal más reciente. Entonces cuando lo pones en el paquete no estás realmente colocando ObjectB, sino que ObjectB vuelve a ArrayList.

Creo que vas a tener que ir con el segundo código ("funciona bien").

+0

ahora rodeé el ObjectB con una clase (que implementa serializable) que contiene la instancia de ObjectB. Necesito ObjectB ser un hijo de ObjectA, así que creo que esta es la mejor solución. y es solo un pequeño cambio en el código –

+0

¿Por qué no puedes simplemente tener ObjectB extender ObjectA e implementar Serializable? –

0

¿Cómo declaras ObjectB antes de pasarlo al paquete? Por lo que entiendo de su pregunta, no obtiene ningún error cuando transfiere el paquete, solo cuando lo elimina. Trate retreiving su ObjectB en un tipo ObjectB directamente como esto:

ObjectB y = (ObjectB) getIntent().getExtras().get("blabla"); 
0

El ObjectA en ArrayList debe implementar la interfaz Parcelable. Después de eso, puedes poner tus listas de arreglos en el intento y obtenerlas en otra actividad.

Cuestiones relacionadas