我有一个ListView,我可以在其中选择多个项目。
然后,我扫描实际选择了哪些。
以下代码不会对我产生错误。
SparseBooleanArray checkedNetworks = networksList.getCheckedItemPositions();
if (checkedNetworks != null) {
int len = checkedNetworks.size();
Log.v("checkedNetworks", checkedNetworks.toString());
for (int i = 0; i < len; i++) {
int key = checkedNetworks.keyAt(i);
Log.v("network:", networks.get(key).getName());
selectedNetworkIds.add(networks.get(key).getId());
}
}
这可行。事实上,非常漂亮。问题是我不检查是否实际选择了ListView中的网络。这很重要,因为虽然用户可能在某一点上选择了网络(这是它在SparseBooleanArray中的原因),但是他们可以取消选择它,在这种情况下,SparseBooleanArray中的值将为false。
所以我试过了。
SparseBooleanArray checkedNetworks = networksList.getCheckedItemPositions();
if (checkedNetworks != null) {
int len = checkedNetworks.size();
Log.v("checkedNetworks", checkedNetworks.toString());
for (int i = 0; i < len; i++) {
if (checkedNetworks.valueAt(i)) {
int key = checkedNetworks.keyAt(i);
Log.v("network:", networks.get(key).getName());
selectedNetworkIds.add(networks.get(key).getId());
}
}
}
}
现在,我在checkedNetworks.keyAt(i)
获得了NullPointer异常。这意味着我们通过了if语句子句,然后了解了一些东西。我不知道为什么会这样。
FATAL EXCEPTION: Thread-44215
at java.lang.NullPointerException at line 89.
at java.lang.Thread.run
这是堆栈跟踪中唯一的相关信息。