2009-10-10 7 views
5

Hallo ich habe ein Problem mit einer Klasse i in der Absicht übergeben will, indem sie es in die putExtras setzen() Sein serializable und der Code wie folgt aussieht:android: Problem mit Serializable Objekt setzte in der Absicht

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

das Problem ist, dass y jetzt eine Arraylist ist und nicht mehr ein ObjectB so kann ich nicht es werfen .. wenn ich den Code zu

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

ändern funktioniert es gut

+0

Nur aus Neugier, was ist "eine Absicht" in diesem Zusammenhang? –

+0

ok ich habe gerade den android tag (wieder) hinzugefügt, eine absicht ist eine android interne sache –

+0

Ah. Vielen Dank! 15 Zeichen! Woot! –

Antwort

14

Durch beide java.util.List und java.io.Serializable in Ihrer Klasse Implementierung Sie diese android bug ausgelöst haben.

+0

Ich denke, ich stolperte über das gleiche Problem: wenn ich eine LinkedList in einem Bündel über putSerializable stopfen, wenn ich versuche, es durch getSerializable zu bekommen, erhalte ich eine ArrayList. Ist es nicht? – superjos

+0

Ja, es scheint LinkedLists in Serializables unter verschiedenen Umständen zu vermasseln. – jjb

+0

Bug von 2009, immer noch hier 3 Jahre später :( – mbritto

0

Ich vermute, was passiert, ist, dass, da Sie ObjectB nicht als serialisierbar deklarieren, es auf das aktuellste übergeordnete Objekt "zurückfällt". Wenn Sie es also in das Bundle einfügen, fügen Sie eigentlich nicht ObjectB, sondern ObjectB in ArrayList zurück.

Ich denke, Sie müssen mit dem zweiten ("funktioniert gut") Code gehen.

+0

Ich umgab das ObjectB jetzt mit einer Klasse (die serializable implementiert), die die ObjectB-Instanz enthält. Ich brauche objectB ein Kind von objectA, also denke ich, das ist ne beste Lösung. und es ist nur eine kleine Änderung am Code –

+0

Warum kann nicht nur ObjectB ObjectA erweitern und Serializable implementieren? –

0

Wie deklarieren Sie ObjectB, bevor Sie es in das Bündel übergeben? Von dem, was ich von Ihrer Frage verstehe, erhalten Sie keinen Fehler, wenn Sie das Bündel weitergeben, nur wenn Sie es entfernen. Versuchen Sie ObjectB in einen ObjectB Typ direkt wie folgt retreiving:

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

Die ObjectA in ArrayList sollte die Schnittstelle Parcelable implementieren. Danach können Sie Ihre Arraylisten in die Absicht setzen und sie in eine andere Aktivität bringen.

Verwandte Themen