Android 哈希映射返回 null

Android Hashmap returning null

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

HashMap<Integer, List<MyChildObject>>

并且在扩展时崩溃,在 adapter.getChildrenCount() 中显示 List.size() 空指针,其中它只是:

public int getChildrenCount(int groupPosition) {
    return mMap.get(groupPosition).size();
}

现在我在 运行 调试器中放置了一个断点,发现我的 mMap 没有问题,我正在测试一个元素,其中该元素的列表包含一个子对象。我可以在调试器中看到该元素实际上是一个大小为 1 的列表。

但是正在测试 List<MyChildObject> list = mMap.get(0); 它 returns null 即使我在调试器中看到 mMap 有那个元素 (<Integer.valueOf(0), non null list of objects>).

更奇怪的是在使用 4 个 hashmap 元素进行测试时:

<0, list>
<1, list>
<2, list>
<3, list>

它工作正常,我可以通过调用 mMap.get(n)...

来访问非空列表

我在这里使用整数键时 HashMap 没有正确使用吗?为什么我无法检索任何元素?

它正在检查 Integer 对象,其中正确装箱和拆箱的值介于 -128 和 127 之间,因为通常会保存这些值。但是,鉴于整数的键值确实检查基础值而不是内存位置,两者之间的相等应该相同。

为什么要使用哈希图?我的意思是这个表格不要求 ArrayList<ArrayList<MyChildObject> > 吗?以防万一,无论如何,您都应该将计数函数切换为进行空检查。

public int getChildrenCount(int groupPosition) {
    List<MyChildObject> list = mMap.get(groupPosition);
    if (list == null) return 0;
    return list.size();
}

因为允许零大小的对象的可能性很大,所以使用 null 也一样好。