Android HashMap java.lang.ClassCastException:java.lang.Integer无法强制转换为java.util.Map $ Entry

时间:2016-03-02 07:03:15

标签: android checkbox hashmap android-recyclerview classcastexception

我有RecyclerView包含CheckBox,检查时应接受getAdapterPosition()的{​​{1}}并检查RecyclerAdapter的状态(布尔值)作为关键字,选中CheckBox CheckBox`中的值会产生以下错误。

错误:

hashmap'.getAdapterPosition() is converted to Integer object.When the

TourPlacesRecyclerAdapter.java :(不包括完整的java类)

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Map$Entry
                                                                                   at com.example.jobinsabu.destination.TourPlacesRecyclerAdapter$RecyclerHolder$1.onChange(TourPlacesRecyclerAdapter.java:89)
                                                                                   at com.github.lguipeng.library.animcheckbox.AnimCheckBox.setChecked(AnimCheckBox.java:291)
                                                                                   at com.github.lguipeng.library.animcheckbox.AnimCheckBox.setChecked(AnimCheckBox.java:264)
                                                                                   at com.github.lguipeng.library.animcheckbox.AnimCheckBox$1.onClick(AnimCheckBox.java:74)
                                                                                   at android.view.View.performClick(View.java:5198)
                                                                                   at android.view.View$PerformClick.run(View.java:21147)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

3 个答案:

答案 0 :(得分:1)

您正在迭代遍历hashmap的键集:

Set s=hashMap.keySet();
Iterator i=s.iterator();
while (i.hasNext()){
   Map.Entry entry=(Map.Entry)i.next();
   Log.e("Position"+entry.getKey().toString(),"Status"+entry.getValue().toString());
}

密钥集仅包含Integer s(因为hashmap的密钥是)。当然,Integer不是来自Map.Entry因此ClassCastException

你应该得到你的hashmap的入口集并像这样迭代

Set<Map.Entry<Integer, Boolean>> s = map.entrySet();
Iterator<Map.Entry<Integer, Boolean>> i = s.iterator();
while (i.hasNext()) {
    Map.Entry<Integer, Boolean> entry = (Map.Entry<Integer, Boolean>) i.next();
}

答案 1 :(得分:1)

你有:

Set s=hashMap.keySet();

你可能想要获得输入集:

Set s=hashMap.entrySet();

如果您使用泛型,编译器会为您检测到此问题。

答案 2 :(得分:1)

您应该使用hashMap.entrySet()代替hashMap.keySet()