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 也一样好。
我有一个可扩展的列表视图,其中数据存储在
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 也一样好。