private void processPoiData() { if (mAllPoi.size() > 0) { for (int i = 0; i < mAllPoi.size(); i++) { addSelectItemByPosition(i); String name = mAllPoi.get(i).getName(); String[] items; if (name.contains("(")) { items = name.replace(")", "").split("\\("); } else { items = name.split("-"); } for (String item : items) { addSelectItem(item, i); } } } } 在这调用了
时间: 2024-02-10 20:21:42 浏览: 18
根据你提供的代码,`processPoiData()` 方法中调用了 `addSelectItemByPosition(i)` 方法,该方法会访问 `indexString` 数组,因此你需要确保 `indexString` 数组的长度大于等于 `mAllPoi` 列表的长度,否则会出现 `ArrayIndexOutOfBoundsException` 异常。你可以在调用 `processPoiData()` 方法之前先检查 `indexString` 数组的长度是否足够。另外,你还需要检查 `mAllPoi` 列表中的元素是否为空,否则也会导致异常的发生。
相关问题
private void processPoiData() { if (mAllPoi.size() > 0) { for (int i = 0; i < mAllPoi.size(); i++) { addSelectItemByPosition(i); String name = mAllPoi.get(i).getName(); String[] items; if (name.contains("(")) { items = name.replace(")", "").split("\("); } else { items = name.split("-"); } for (String item : items) { addSelectItem(item, i); } } } } 在这调用了 报错 java.lang.ArrayIndexOutOfBoundsException: length=10; index=10 改一下
好的,你可以尝试将 `addSelectItemByPosition()` 方法中的 `position` 参数改为 `i + 1`,并在调用 `addSelectItemByPosition()` 方法之前先判断 `indexString` 数组的长度是否大于等于 `i + 1`,代码如下:
```
private void processPoiData() {
if (mAllPoi.size() > 0) {
for (int i = 0; i < mAllPoi.size(); i++) {
if (indexString.length >= i + 1) {
addSelectItemByPosition(i + 1);
}
String name = mAllPoi.get(i).getName();
String[] items;
if (name.contains("(")) {
items = name.replace(")", "").split("\\(");
} else {
items = name.split("-");
}
for (String item : items) {
addSelectItem(item, i);
}
}
}
}
protected void addSelectItemByPosition(int position) {
if (indexString.length >= position) {
addSelectItem(indexString[position - 1], position - 1);
}
}
```
这样可以避免 `ArrayIndexOutOfBoundsException` 异常的发生。
阅读全文