[英]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.