ArrayList空指针异常

时间:2014-01-25 11:07:52

标签: java android listview arraylist nullpointerexception

我创建了一个arraylist和一个ListView。我打算遍历ListView,检查它们是否被检查,然后将对象(使用ListView.getItem())添加到我的arraylist。但是我得到一个NullPointerException。 ArrayList people_selected,在类顶部声明如下:

ArrayList<PeopleDetails> selected_people;

我的代码:

for (int i = 0; i < people_list.getCount(); i++) {
              item_view = people_list.getAdapter().getView(i, null, null);
                chBox = (CheckBox) item_view.findViewById(R.id.checkBox);//your xml id value for checkBox.
                if (chBox.isChecked()) {
                    selected_people.add((PeopleDetails) people_list.getItemAtPosition(i));
                }
            }

        for(PeopleDetails person : selected_people){

            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(person.number, null, sms_message, null, null);        
            }
        ///and now need to write party to file.

我在第

行收到错误
  

for(PeopleDetails person:selected_people)

说“NullPointerException” 。我认为这意味着arraylist是null,并且无法弄清楚为什么它应该为null。我是否在课堂上声明错了?或者我的选择和添加方法是否有问题?

6 个答案:

答案 0 :(得分:15)

ArrayList<PeopleDetails> people_selected;

您宣布并且从未初始化。只需在使用之前初始化它。否则NullPointerException

尝试初始化

ArrayList<PeopleDetails> people_selected= new ArrayList<PeopleDetails>();

答案 1 :(得分:7)

你错过了

people_selected = new ArrayList<PeopleDetails>();

你已宣布但尚未初始化。

答案 2 :(得分:2)

代码显示您声明了变量,但没有显示您对其进行初始化,如下所示:

people_selected = new ArrayList<PeopleDetails>();

答案 3 :(得分:2)

您宣布 people_selected ,但您使用的是 selected_people ?!
哪个从未填补......

答案 4 :(得分:0)

增强的for循环大致属于这种结构

for (Iterator<T> i = someList.iterator(); i.hasNext();) {

}

未初始化的收藏集ArrayList<PeopleDetails> selected_people;指的是null

如果在未初始化的Collection上启动增强的for循环,它将抛出NullPointerException,因为它在null引用上调用迭代器someList.iterator()

另一方面,如果你有一个像这样的初始化集合

ArrayList<PeopleDetails> selected_people = new ArrayList<>();

您会注意到增强的for循环不会抛出任何NullPointerException,因为someList.iterator()现在返回迭代器而i.hasNext()返回false只是为了这样循环不会继续。

PS:增强的for循环骨架取自here

答案 5 :(得分:0)

发生错误是因为你还没有初始化数组

添加这个解决了我的问题

selected_people = new ArrayList<PeopleDetails>();