0

我有一个我无法解决的问题。

当我将项目添加到我的数据库时,我尝试填充 mylistView并从数据库中删除任何等于" "3 个空格的项目listView,而不是从数据库中删除,以便用户看不到空行。为此调用方法 load()。我不断得到一个nullPointerException. 它似乎找到了该项目(我用 a 对其进行了测试System.out.println())但是当调用 remove 方法时它崩溃了。

private void load() {       
    Cursor c=helper.getById(taskId);
    c.moveToFirst();                
    String[] temp = getArray(helper.getPart(c));

    ArrayAdapter<String> arrayAdapter =      
             new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, temp);
    lv.setAdapter(arrayAdapter); 

    int count = arrayAdapter.getCount();
    for (int i = 0; i < count; i++) {
        if (arrayAdapter.getItem(i).equals("   ")) {
            arrayAdapter.remove(arrayAdapter.getItem(i));
        }                    
    }

    arrayAdapter.notifyDataSetChanged();

    c.close();
}
4

1 回答 1

1

好吧,这是因为当您在循环中执行删除时列表正在缩小。

假设一开始的大小是 10(所以索引 0 - 9),然后当您删除与您的条件匹配的第一个项目时,实际大小会回到 9,但在您的循环中您仍然有“i < 10”当您尝试访问索引 i = 9 时,您有一个NullPointer Exception.

尝试以下操作:

        for (int i = 0; i < arrayAdapter.getCount(); i++) {
             if(arrayAdapter.getItem(i).equals("   ")) {
                 arrayAdapter.remove(arrayAdapter.getItem(i));
             }                   
         }

请注意,我用循环内部替换了您的count变量。getCount()当你这样做时,你永远不应该拥有NullPointer Exception.

于 2012-12-04T15:10:49.947 回答