SparseBooleanArray的副作用?

时间:2014-11-15 14:25:04

标签: java android android-listview sparse-array

我有一个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

这是堆栈跟踪中唯一的相关信息。

0 个答案:

没有答案