在 Android 中使用和迭代器时,尝试获取列表视图项目会抛出 NoSuchElementException
Trying to get a listview item throws NoSuchElementException when using and iterator in Android
我有以下代码:
CustomArrayAdapter adapter;
Set<Integer> checkedItems;
Iterator<Integer> it;
Model element;
adapter = (CustomArrayAdapter) getListAdapter();
checkedItems = adapter.getCheckedItems();
it = checkedItems.iterator();
int size = checkedItems.size();
for (int i = 0; i < size; i++) {
element = adapter.getItem(it.next());
// Do whatever
}
尝试使用 adapter.getItem(it.next()) 获取列表视图项时抛出错误 NoSuchElementException。
在我的具体情况下,大小是 1。最初我在 for 循环之外第一次设置 Iterator,所以我猜它被放置在第一个元素。在第一次迭代中,我猜 it.next() 指向第一个元素,但似乎没有,因为它会抛出错误。
我做错了什么?
我认为你的问题是调用 it.next()
return 是 下一个 对象,这意味着如果你从 0 开始,it.next()
将 return 1. 由于您的 ListView
中只有 1 个元素,该元素位于索引 0,而不是 1,这解释了为什么您得到 NoSuchElementException
.
要解决此问题,您可以调用 Iterator
方法 hasNext
,如果有另一个元素,它将 return true
,如果有,则 false
不是,在调用element = adapter.getItem(it.next())
之前。可能类似于以下内容:
if (it.hasNext())
{
element = adapter.getItem(it.next());
}
要处理获取第一个元素(索引 0),您可以做一个简单的检查:
if (it.next() == 1)
{
element = adapter.getItem(it.next() - 1);
}
我有以下代码:
CustomArrayAdapter adapter;
Set<Integer> checkedItems;
Iterator<Integer> it;
Model element;
adapter = (CustomArrayAdapter) getListAdapter();
checkedItems = adapter.getCheckedItems();
it = checkedItems.iterator();
int size = checkedItems.size();
for (int i = 0; i < size; i++) {
element = adapter.getItem(it.next());
// Do whatever
}
尝试使用 adapter.getItem(it.next()) 获取列表视图项时抛出错误 NoSuchElementException。
在我的具体情况下,大小是 1。最初我在 for 循环之外第一次设置 Iterator,所以我猜它被放置在第一个元素。在第一次迭代中,我猜 it.next() 指向第一个元素,但似乎没有,因为它会抛出错误。
我做错了什么?
我认为你的问题是调用 it.next()
return 是 下一个 对象,这意味着如果你从 0 开始,it.next()
将 return 1. 由于您的 ListView
中只有 1 个元素,该元素位于索引 0,而不是 1,这解释了为什么您得到 NoSuchElementException
.
要解决此问题,您可以调用 Iterator
方法 hasNext
,如果有另一个元素,它将 return true
,如果有,则 false
不是,在调用element = adapter.getItem(it.next())
之前。可能类似于以下内容:
if (it.hasNext())
{
element = adapter.getItem(it.next());
}
要处理获取第一个元素(索引 0),您可以做一个简单的检查:
if (it.next() == 1)
{
element = adapter.getItem(it.next() - 1);
}