0

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

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

4

0 回答 0