我遇到了一个无法解决的问题。
当我向我的数据库添加项目时,我尝试填充listView
并从" "
中移除任何等于listView
的项目,这些项目是3个空格,而不是从数据库中只是让用户看不到空行。调用方法load()来执行此操作。我一直在nullPointerException
。它似乎找到了项目(我用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();
}
答案 0 :(得分:1)
好吧,因为当您在循环中执行删除时,列表正在缩小。
让我们说开头的大小是10(所以索引0 - 9),然后当你删除符合条件的第一个项目时,实际大小会回到9,但是在你的循环中你仍然有“我&lt; 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
。