java.lang.ClassCastException:java.util.HashMap无法强制转换为java.util.TreeMap

tbm*_*tbm 1 android hashmap treemap classcastexception android-intent

我将TreeMap填充到intent中:

private TreeMap<Long, Long> mSelectedItems;

...

mSelectedItems = new TreeMap<Long, Long>();

...

Intent intent = new Intent();
intent.putExtra("results", mSelectedItems);

setResult(RESULT_OK, intent);
Run Code Online (Sandbox Code Playgroud)

然后尝试在调用活动中将其读回:

TreeMap<Long, Long> results = (TreeMap<Long, Long>)
    data.getSerializableExtra("results");
Run Code Online (Sandbox Code Playgroud)

什么导致:

E/AndroidRuntime(26868): Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.TreeMap
Run Code Online (Sandbox Code Playgroud)

嗯,当然,但是因为我没有在代码中的任何地方使用HashMap,并且因为TreeMap实现了Serializable,所以这应该没有错误,不是吗?为什么android试图强迫我上课我不使用?

sin*_*hum 5

Emmanuel提供的第一个链接就是您遇到的完全相同的问题.它没有具体提到确切的错误,但暗示.

问题是,当你TreeMap被序列化时,它将作为一个回来HashMap.Emmanuel提供的这个答案完全解释了.

因此,只需执行以下操作即可解决您的问题:

TreeMap<Long, Long> results = new TreeMap<Long, Long>((HashMap<Long, Long>) getIntent().getSerializableExtra("results"));
Run Code Online (Sandbox Code Playgroud)

基本上results使用HashMap从bundle返回的TreeMap 填充.

如果这可以解决您的问题,也可以在提供的链接中提供这些答案.