2013-10-13 3 views
0

Я получаю 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, я не понимаю, как его структурировать.

+0

Что-то здесь отключено ... на основе приведенного выше кода, на строке сразу после «// установить синий массив» ... i +1 всегда должно быть нечетным числом. Но в отчете об исключениях указано, что i + 1 = 2. Я изменяюсь в другом месте этого цикла? –

+0

В вашем for-loop вы используете 'itemListCard.size()', но вы обращаетесь к объектам с помощью 'objectId.get (i)'. Вы уверены, что у них одинаковое количество объектов? Я бы предложил использовать тот же ArrayList, как цикл, так и методы доступа. – Markus

+0

@Markus Хорошая добыча. НО 'itemListCard.size' и' objectId.size' - это одно и то же. –

ответ

0

Это была действительно ошибка parse. Я использую parse.com, и я использовал массивы для неправильных классов. Я должен был пойти в свой браузер данных на parse.com и настроить все objectids

1

кажется, что objectId массив имеет только два элемента (позиции 0 и 1), и вы пытаетесь получить доступ к позиции 2 во второй итерации цикла for. Проверьте, как вы устанавливаете objectId.

Проводящий код относительно objectId будет полезен также.

+0

Я понимаю, что это то, что происходит. –

Смежные вопросы