2009-10-10 57 views
5

嗨,我有一類我想將其放入putExtras(在意圖通過)問題 它的序列化和代碼如下所示:安卓:問題與序列化對象放入意圖

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

問題,使y現在是一個ArrayList和不再是一個對象B,所以我不能丟.. 如果我更改代碼以

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

它工作正常

+0

出於好奇,在這種情況下什麼是「意圖」? – 2009-10-10 22:00:46

+0

好吧,我剛剛添加了Android標籤(再次),意圖是一個Android內部的東西 – 2009-10-11 08:30:03

+0

啊。謝謝! 15個字符!活泉! – 2009-10-12 01:08:35

回答

14

通過在你的類實現兩者的java.util.List和了java.io.Serializable你觸發此android bug

+0

我想我偶然發現了同樣的問題:如果我通過putSerializable在一個bundle中填充LinkedList,當我嘗試通過getSerializable獲取它時,我收到一個ArrayList。不是嗎? – superjos 2011-09-03 17:47:12

+0

是的,它似乎在多種情況下在Serializables中混淆了LinkedLists。 – jjb 2012-02-11 06:49:13

+0

從2009年的錯誤,仍然在這裏3年後:( – mbritto 2012-09-26 15:05:48

0

我懷疑發生了什麼,因爲你沒有將ObjectB聲明爲可序列化,所以它「回退」到最近的父對象。所以當你把它放入Bundle時,你實際上並沒有放入ObjectB,但是ObjectB轉回到了ArrayList。

我想你將不得不與第二個(「工作正常」)代碼。

+0

我現在用一個包含ObjectB實例的類包含了ObjectB(它實現了可序列化)。我需要objectB成爲objectA的孩子,所以我認爲這是最好的解決方案。它只是在代碼 – 2009-10-13 10:21:52

+0

只是一點點改變爲什麼你不能只有ObjectB擴展ObjectA和實現Serializable? – 2009-10-13 19:15:17

0

在將它傳遞給包之前,你如何聲明ObjectB? 根據我對你的問題的理解,當你傳入包時,只有在刪除它時纔會收到錯誤。 嘗試retreiving你的對象B到對象B型直接像這樣:

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

ObjectA in ArrayList應該實現接口Parcelable。之後,您可以將您的陣列列表放在意圖中,並讓他們參與其他活動。