經過一段時間嘗試調試代碼後,我一直無法弄清楚爲什麼會發生此錯誤。Android ArrayIndexOutofBounds錯誤
我的主Activity
有一個對話框,允許選擇項目。 這是它的代碼。 mSelectedItems是Main類中的靜態ArrayList
。
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
// If the user checked the item, add it to the selected items
mSelectedItems.add(which);
}
else if (mSelectedItems.contains(which)) {
// Else, if the item is already in the array, remove it
mSelectedItems.remove(Integer.valueOf(which));
}
}
})
// Set the action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Data d = new Data();
d.setSelectedPlayers(mSelectedItems);
d.run();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//CODE TO JUST CLOSE DIALOGBOX
}
});
return builder.create();
}
在這個對話框中現在,對於「確認按鈕」 - 我嘗試從另一個類,確實爲在對話框中選擇的項目的一些計算調用一個方法。我通過將我主要活動中的mSelectedItems arrayList設置爲另一個類中的arrayList字段(現在將其稱爲Data類)來完成此操作。下面是相關的代碼塊吧:
private ArrayList<String> playerNames = new ArrayList<String>(Arrays.asList("Messi", "Ronaldo", "Turan", "Drogba","Kuyt"));
private int[] playerRatings = {87, 78, 66, 69, 86};
private ArrayList selectedPlayers;
public void setSelectedPlayers(ArrayList mSelectedItems) {
this.selectedPlayers = mSelectedItems;
}
public int run() {
int totalScore = 0;
for(Object player: selectedPlayers) {
int index = playerNames.indexOf(player);
int rating = playerRatings[index];
int[] playersActionSet = actionMatrix[index];
調試告訴我,出界失誤是INT指標線。此代碼塊需要迭代selectedPlayers(將從另一個類的對話框中分配給mSelectedPlayers),並查找每個用戶所選項目的索引,然後進行計算(計算代碼不包括在此處)。
有人可以解釋爲什麼這個錯誤發生?似乎索引每次都被賦值爲-1,但是隻有當列表爲空並且您試圖在其中查找indexOf項時纔會發生。
這仍然給出了錯誤。問題是selectdPlayers列表是空的。但我收到了同樣的錯誤。 – newenthusiast