在两个活动之间传递一个 LinkedHashMap<Object,String>。

5
我在将LinkedHashMap从一个Activity传递到另一个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          

类 旅行方式:

  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个回答

1
你不能直接将 HashMap 强制转换为 LinkedHashMap。相反,你应该这样做:
LinkedHashMap<Object,String>polypoint = new LinkedHashMap<Object, String>();

然后使用putAll将之前的HashMap添加进去:
polypoint.putAll(polyPoints);

1
谢谢。它解决了问题。但现在顺序被改变了。但我想保留发送列表的顺序,这就是我使用LinkedHashMap的原因。但现在在第二个活动中,顺序被改变了。 - Sarath Subu
1
顺序被改变是因为当你调用putExtra()时,Android会将LinkedHashMap转换为HashMap,从而丢弃所有的排序。 - David Wasser

1

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

为了解决这个问题,您应该将LinkedHashMap转换为有序数组,并将数组放入Intent extras中。在接收端,您可以从有序数组重新创建LinkedHashMap(如果需要),或者直接使用数组。

更多详情请参见https://dev59.com/51HTa4cB1Zd3GeqPU9Xa#38960732LinkedList put into Intent extra gets recast to ArrayList when retrieving in next activity


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接