我有一个 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)
. 这意味着我们通过了 if 语句子句,然后出现了一些 derped。我不知道为什么会这样。
FATAL EXCEPTION: Thread-44215
at java.lang.NullPointerException at line 89.
at java.lang.Thread.run
这是堆栈跟踪中唯一的相关信息。