【问题标题】:putExtra treeMap returns HashMap cannot be cast to TreeMap androidputExtra treeMap 返回 HashMap 不能转换为 TreeMap android
【发布时间】:2012-12-19 19:55:35
【问题描述】:

我需要你的帮助,我不明白发生了什么?

我正在尝试在 2 个活动之间发送 TreeMap,代码如下:

class One extends Activity{
 public void send(){
   Intent intent = new Intent(One.this, Two.class);
   TreeMap<String, String> map = new TreeMap<String, String>();
   map.put("1","something");
   intent.putExtra("map", map);
   startActivity(intent);
   finish();
 }
}

class Two extends Activity{
  public void get(){
  (TreeMap<String, String>) getIntent().getExtras().get("map");//Here is the problem
  }
}

这返回给我 HashMap 不能转换为 TreeMap。什么

【问题讨论】:

标签: android android-intent hashmap treemap


【解决方案1】:

作为@Jave 建议的替代方案,如果您确实需要将数据结构设为TreeMap,只需使用将另一个地图作为数据源的适当构造函数即可。因此,在接收端 (Two) 执行以下操作:

public class Two extends Activity {
    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TreeMap<String, String> map = new TreeMap<String, String>((Map<String, String>) getIntent().getExtras().get("map"));
    }
}

但是,根据您的项目,您可能不必担心确切的 Map 实现。因此,您可以直接转换为 Map 接口:

public class Two extends Activity {
    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Map<String, String> map = (Map<String, String>) getIntent().getExtras().get("map");
    }
}

【讨论】:

    【解决方案2】:

    听起来它序列化为 HashMap,这就是你得到的。猜猜你将不得不满足于一个HashMap。或者,您可以创建自己的帮助类并实现 Parcelable,然后按顺序序列化键/字符串。

    【讨论】:

    • 当你将任何实现Map 接口的东西放入Bundle 时,它会以HashMap 的形式出现。与List 相同 - 你总是会从中得到ArrayList。见stackoverflow.com/questions/12300886/…
    • 酷,感谢您的解释,我怀疑这方面的一些事情。不过,很高兴知道支持普通的 HashMap。
    【解决方案3】:

    您可以创建一个新的TreeMap&lt;String, String&gt; 并使用putAll() 方法,而不是将结果直接转换为TreeMap

    TreeMap<String, String> myMap = new TreeMap<String, String>;
    HashMap<String, String> receivedMap = getIntent().getExtras().get("map");
    myMap.putAll(receivedMap);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2013-12-11
      • 1970-01-01
      • 2019-02-16
      相关资源
      最近更新 更多