2013-10-13 83 views
0

我收到java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2。关于这个问题有很多问题,但没有人帮助我。我正在构建一个旨在显示“人物”与“人物”的阵列。这是我怎么做一个伪结构:阵列:无效索引

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

有些东西在这里......基于上面显示的代码,在“//设置蓝色数组”之后......我+1应该始终是一个奇数。但异常报告i + 1 = 2。我在那个循环的其他地方被修改了吗? –

+0

在你的for循环中你使用'itemListCard.size()',但是你用'objectId.get(i)'来访问对象。你确定他们有相同数量的对象吗?我会建议使用相同的ArrayList循环和访问器方法。 – Markus

+0

@Markus良好的捕获。但'itemListCard.size'和'objectId.size'是相同的东西。 –

回答

0

这实际上是一个parse错误。我正在使用parse.com,而我正在使用数组作为错误的类。我不得不去parse.com上的数据浏览器,并调整所有的objectids

1

看来objectId数组只有两个元素(位置01),和你想for循环的第二次迭代期间访问2位置。检查你如何设置objectId

发布代码关于objectId也将有所帮助。

+0

我明白这是发生了什么事。 –