我有一个可扩展的列表视图,其中数据存储在
中 HashMap<Integer, List<MyChildObject>>
并且在展开时崩溃说List.size()
中的adapter.getChildrenCount()
空指针只是简单地说:
public int getChildrenCount(int groupPosition) {
return mMap.get(groupPosition).size();
}
现在我在一个运行调试器中放置了一个断点,看到我的mMap
很好,我正在测试一个元素,其中该元素的列表包含一个子对象。我可以在调试器中看到该元素实际上是一个size = 1的列表。
但测试
List<MyChildObject> list = mMap.get(0);
它返回null,即使我在调试器中看到mMap有该元素(<Integer.valueOf(0), non null list of objects>
)。
甚至更奇怪的是在使用4个hashmap元素进行测试时:
<0, list>
<1, list>
<2, list>
<3, list>
它工作正常,我可以通过调用mMap.get(n)来访问非空列表......
我是否在这里使用整数键正确使用HashMap
?为什么我无法检索任何元素?
答案 0 :(得分:0)
对于-128到127之间的值,检查整数对象的正确对象和取消装箱是非常好的,因为通常会保存这些值。但是,假设整数的键值检查基础值而不是内存位置,则两者之间的平等值应相同。
为什么使用hashmap?我的意思是这个表格没有为ArrayList<ArrayList<MyChildObject> >
打电话吗?在这种情况下,你应该切换你的计数函数,无论如何都要进行空检查。
public int getChildrenCount(int groupPosition) {
List<MyChildObject> list = mMap.get(groupPosition);
if (list == null) return 0;
return list.size();
}
因为如果允许使用零大小的对象,赔率很高,那么使用null就可以了。