簡體   English   中英

傳遞LinkedHashMap <Object,String> 從一項活動到另一項活動

[英]Passing an LinkedHashMap<Object,String> from one activity to another

我將LinkedHashMap從一個Activity傳遞到另一個Activity時遇到了問題。 我提到了所有相關的帖子,沒有一個可以解決我的問題。 請幫幫我。

活動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);

您無法直接從HashMap轉換為LinkedHashMap 您應該能夠這樣做:

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

然后使用putAll添加以前的HashMap

polypoint.putAll(polyPoints);

當您調用putExtra()時,Android會將LinkedHashMap轉換為HashMap 這會丟棄排序,這就是您首先要使用LinkedHashMap原因。

要解決這個問題,您應該將LinkedHashMap轉換為有序數組,並將該數組放入Intent附加組件中。 然后,在接收端,您可以從有序數組中重新創建LinkedHashMap (如果需要),或者只是按原樣使用數組。

有關詳細信息,請參閱https://stackoverflow.com/a/38960732/769265並將LinkedList置於Intent extra中,在下一個活動中檢索時重新獲取ArrayList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM