【问题标题】:java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.TreeMap [duplicate]java.lang.ClassCastException:java.util.HashMap 无法转换为 java.util.TreeMap [重复]
【发布时间】:2014-04-04 15:50:50
【问题描述】:

我将 TreeMap 填充到意图中:

private TreeMap<Long, Long> mSelectedItems;

...

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

...

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

setResult(RESULT_OK, intent);

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

TreeMap<Long, Long> results = (TreeMap<Long, Long>)
    data.getSerializableExtra("results");

导致:

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

好吧,当然,但是因为我没有在代码中的任何地方使用 HashMap,而且由于 TreeMap 实现了 Serializable,所以这应该可以正常工作,不是吗?为什么 android 试图强行给我一个我没有使用的类?

【问题讨论】:

  • 您是否尝试过寻找解决方案? link, link
  • 实际上我做到了,但显然我没有使用正确的搜索词。第一个链接没有提到 ClassCastException,第二个链接没有提到任何一种 Map。

标签: android android-intent hashmap classcastexception treemap


【解决方案1】:

Emmanuel 提供的第一个 link 与您遇到的完全相同问题相同。它没有具体提到确切的错误,但它是隐含的。

问题是当您的TreeMap 被序列化时,它会以HashMap 的形式返回。由 Emmanuel 提供的 answer 完全解释。

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

TreeMap<Long, Long> results = new TreeMap<Long, Long>((HashMap<Long, Long>) getIntent().getSerializableExtra("results"));

基本上使用从包返回的HashMap 填充您的results TreeMap。

如果这可以解决您的问题,请在提供的链接中为这些答案投票。

【讨论】:

  • 无论如何,当我添加这个链接时,谷歌搜索或作为建议的可能问题都没有返回链接。自从他们确实解决了问题以来,我对提供的答案表示赞成。
  • @tbm 哦,我明白了。有时会发生这种情况,您搜索某些内容,但尽管有某些内容却找不到。无论如何,既然它解决了您的问题,请接受答案(而不是作为评论提及)。很高兴它最终为你解决了。
猜你喜欢
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2019-02-04
相关资源
最近更新 更多