2009-10-10 10 views
5

Ciao ho problemi con una classe voglio passare in un intento mettendola in putExtras() sua serializzabile e il codice simile a questo:Android: problema con oggetto serializzabile mettere in intento

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"); 

il problema è, che y ora è un ArrayList e non più un ObjectB così non posso buttarlo .. se cambio il codice per

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

funziona benissimo

+0

Solo per curiosità, che cosa è "un intento" in questo contesto? –

+0

ok ho appena aggiunto il tag Android (di nuovo), un intento è un oggetto interno Android –

+0

Ah. Grazie! 15 personaggi! Woot! –

risposta

14

Con l'implementazione sia java.util.List e java.io.Serializable nella tua classe che hai scatenato questa android bug.

+0

Penso di essermi imbattuto nello stesso problema: se inserisco un LinkedList in un pacchetto tramite putSerializable, quando provo a ottenerlo da getSerializable, ricevo un ArrayList. Non è vero? – superjos

+0

Sì, sembra capitare up LinkedLists in Serializables in più circostanze. – jjb

+0

Bug dal 2009, ancora qui 3 anni dopo :( – mbritto

0

Sospetto che quello che sta succedendo sia che, dal momento che non stai dichiarando ObjectB come serializzabile, "ricade" sull'oggetto genitore più recente che è. Quindi, quando lo metti nel Bundle non stai effettivamente inserendo ObjectB, ma ObjectB viene ricondotto a ArrayList.

Penso che dovremo andare con il secondo codice ("funziona bene").

+0

ora ho circondato l'ObjectB con una classe (che implementa serializzabile) che contiene l'istanza ObjectB. ho bisogno di objectB per essere un figlio di objectA quindi penso che questa sia la migliore soluzione. ed è solo un piccolo cambiamento al codice –

+0

Perché non puoi semplicemente avere ObjectB estendere ObjectA e implementare Serializable? –

0

Come si dichiara ObjectB prima di passarlo nel pacchetto? Da quello che ho capito della tua domanda non ricevi alcun errore quando passi nel bundle, solo quando lo rimuovi. Prova retreiving tua ObjectB in un tipo ObjectB direttamente in questo modo:

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

Il ObjectA in ArrayList deve implementare l'interfaccia Parcelable. Dopodiché puoi mettere i tuoi arraylist nell'intento e metterli in un'altra attività.

Problemi correlati