2014-02-08 154 views
4

從一個Activity向另一個活動傳遞LinkedHashMap時,我面臨一個問題。我提到所有相關的帖子都沒有解決我的問題。請幫助我。將LinkedHashMap <Object,String>從一個活動傳遞到另一個活動

活動1:

Intent mapIntent = new Intent(this,GMap.class); 
LinkedHashMap<TravelMode, String> polyPoints=(LinkedHashMap<TravelMode, String>) gData.values().toArray()[0]; 
mapIntent.putExtra(EXTRA_MESSAGE, polyPoints); 
startActivity(mapIntent); 

活動2:

LinkedHashMap<Object,String>polypoint = (LinkedHashMap<Object, String>)poly.getSerializableExtra(EXTRA_MESSAGE); 

這是在執行此操作我米得到的錯誤。

錯誤:

ClassCastException: Cannot cast java.util.HashMap (id=830032266720) to java.util.LinkedHashMap   

類TravelMode:

class TravelMode implements Serializable{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public String travelMode; 

    /** 
    * @return the travelMode 
    */ 
    public String getTravelMode() { 
     return travelMode; 
    } 

    /** 
    * @param travelMode the travelMode to set 
    */ 
    public void setTravelMode(String travelMode) { 
     this.travelMode = travelMode; 
    } 

    public TravelMode(String travelMode) { 
     super(); 
     this.travelMode = travelMode; 
    } 
} 

我試着檢索類似下面這樣一個一切準備,但我仍然得到同樣的錯誤:(

HashMap<?,?>hashPoly= (HashMap<?, ?>)poly.getSerializableExtra(EXTRA_MESSAGE); 
LinkedHashMap<TravelMode, String> polypoint= ((LinkedHashMap<TravelMode, String>)hashPoly); 

回答

0

你不能直接從HashMap投到LinkedHashMap。 LD能夠做到這一點,而不是:

LinkedHashMap<Object,String>polypoint = new LinkedHashMap<Object, String>(); 

,然後用putAll加上先前HashMap

polypoint.putAll(polyPoints); 
+1

謝謝。它解決了這個問題。但現在訂單正在發生變化。但我想保留髮送列表的順序,這就是我使用linkedHashMap的原因。但是現在在第二個活動中,訂單被改變了。 –

+0

順序發生了變化,因爲當您調用putExtra()時,Android會將'LinkedHashMap'轉換爲'HashMap',從而丟棄所有的順序。 –

0

的Android,當你調用putExtra()轉換LinkedHashMapHashMap。這放棄了順序,這就是爲什麼您想首先使用LinkedHashMap的原因。

爲了解決這個問題,您應該將LinkedHashMap轉換爲有序數組,並將數組放入Intent附加組件中。在接收端,您可以從有序數組中重新創建LinkedHashMap(如有必要),或者直接使用該數組。

請參閱https://stackoverflow.com/a/38960732/769265LinkedList put into Intent extra gets recast to ArrayList when retrieving in next activity瞭解更多詳情。

相關問題