Я получаю java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
. Об этом много вопросов, но никто мне не помогает. Я создаю массив, который предназначен для отображения «человек» и «человек». Это псевдо-структура, как я это делаю:Array: Неверный индекс
Array[0] vs Array[1]
Array[2] vs Array[3]
Array[4] vs Array[5]
Примечание: Можно сделать параллельный массив, если это будет сделать это проще.
Вот код, который я пытаюсь
private void displayCard() {
HomeItemList = new ArrayList<HomeItem>();
fightList.whereContainedIn("objectId", itemListCard);
fightList.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objectId, ParseException e) {
if (e == null){
for(int i = 0; i < itemListCard.size(); i=i+2){
HomeItem homeItem = new HomeItem();
homeItem.setHomeItemID(k);
k++;
//set Red Array
homeItem.setHomeItemRedName(objectId.get(i).getString("Name"));
homeItem.setHomeItemRedAge(objectId.get(i).getString("Age"));
homeItem.setHomeItemRedRecord(objectId.get(i).getString("Record"));
homeItem.setHomeItemRedHeight(objectId.get(i).getString("Height"));
homeItem.setHomeItemRedWeight(objectId.get(i).getString("Weight"));
homeItem.setHomeItemRedCity(objectId.get(i).getString("Location"));
homeItem.setHomeItemRedExp(objectId.get(i).getString("Experience"));
//Set Blue Array
homeItem.setHomeItemBlueName(objectId.get(i+1).getString("Name"));
homeItem.setHomeItemBlueAge(objectId.get(i+1).getString("Age"));
homeItem.setHomeItemBlueRecord(objectId.get(i+1).getString("Record"));
homeItem.setHomeItemBlueHeight(objectId.get(i+1).getString("Height"));
homeItem.setHomeItemBlueWeight(objectId.get(i+1).getString("Weight"));
homeItem.setHomeItemBlueCity(objectId.get(i+1).getString("Location"));
homeItem.setHomeItemBlueExp(objectId.get(i+1).getString("Experience"));
//add the array
HomeItemList.add(homeItem);
itemListCard.size()
изменит размеры часто. Прямо сейчас, это 2. Это мой LogCat:
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.package.name.databaseFightCard$3.done(databaseFightCard.java:225)
at com.parse.FindCallback.internalDone(FindCallback.java:45)
at com.parse.FindCallback.internalDone(FindCallback.java:1)
at com.parse.Parse$6$1.run(Parse.java:888)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Это указывает на линию сразу после //set Blue Array
. Я понимаю, что, поскольку массивы начинаются с 0, я не понимаю, как его структурировать.
Что-то здесь отключено ... на основе приведенного выше кода, на строке сразу после «// установить синий массив» ... i +1 всегда должно быть нечетным числом. Но в отчете об исключениях указано, что i + 1 = 2. Я изменяюсь в другом месте этого цикла? –
В вашем for-loop вы используете 'itemListCard.size()', но вы обращаетесь к объектам с помощью 'objectId.get (i)'. Вы уверены, что у них одинаковое количество объектов? Я бы предложил использовать тот же ArrayList, как цикл, так и методы доступа. – Markus
@Markus Хорошая добыча. НО 'itemListCard.size' и' objectId.size' - это одно и то же. –