Android Hashmap返回null

时间:2016-06-15 04:15:21

标签: java android hashmap expandablelistview

我有一个可扩展的列表视图,其中数据存储在

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?为什么我无法检索任何元素?

1 个答案:

答案 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就可以了。