【问题标题】:Passing an LinkedHashMap<Object,String> from one activity to another将 LinkedHashMap<Object,String> 从一个活动传递到另一个活动
【发布时间】:2014-02-08 10:30:41
【问题描述】:

我在将 LinkedHashMap 从一个 Activity 传递到另一个 Activity 时遇到问题。我参考了所有相关的帖子,他们都无法解决我的问题。请帮帮我。

活动一:

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

活动二:

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

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    您不能直接从HashMap 转换为LinkedHashMap。您应该可以这样做:

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

    然后将之前的HashMapputAll相加:

    polypoint.putAll(polyPoints);
    

    【讨论】:

    • 谢谢。它解决了这个问题。但现在顺序发生了变化。但是我想保留发送列表的顺序,这就是我使用linkedHashMap的原因。但现在在第二个活动中,顺序发生了变化。
    • 顺序发生了变化,因为Android在你调用putExtra()时将LinkedHashMap转换为HashMap,从而丢弃了所有的排序。
    【解决方案2】:

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

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

    请参阅https://stackoverflow.com/a/38960732/769265LinkedList put into Intent extra gets recast to ArrayList when retrieving in next activity 了解更多详情。

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2013-01-12
      • 2017-12-10
      • 2012-07-05
      相关资源
      最近更新 更多