putExtra treeMap返回HashMap无法强制转换为TreeMap android

时间:2012-12-19 19:55:36

标签: android android-intent hashmap treemap

我需要你的帮助,我无法理解发生了什么?

我正在尝试在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。什么

3 个答案:

答案 0 :(得分:2)

作为@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");
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以创建新的TreeMap并使用putAll()方法,而不是直接将结果投射到TreeMap<String, String>

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