我创建了一个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。我是否在课堂上声明错了?或者我的选择和添加方法是否有问题?
答案 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>();