将LinkedHashMap <object,string>从一个活动传递到另一个</object,string>

时间:2014-02-08 10:30:42

标签: java android android-intent

我将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);

2 个答案:

答案 0 :(得分:1)

您无法直接从HashMap投射到LinkedHashMap。您应该能够这样做:

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

然后使用HashMap添加上一个putAll

polypoint.putAll(polyPoints);

答案 1 :(得分:1)

当您致电LinkedHashMap时,

Android会将HashMap转换为putExtra()。这会丢弃排序,这就是您想要首先使用LinkedHashMap的原因。

要解决此问题,您应该将LinkedHashMap转换为有序数组,并将数组放入Intent个附加内容中。在接收端,您可以从有序数组中重新创建LinkedHashMap(如果需要),或者只是按原样使用数组。

有关详细信息,请参阅https://stackoverflow.com/a/38960732/769265LinkedList put into Intent extra gets recast to ArrayList when retrieving in next activity