java.lang.ArrayIndexOutOfBoundsException:length = 4; index = 4长度数组

时间:2014-04-02 09:18:01

标签: java android arrays exception

我有这个错误:

04-02 11:03:57.922: E/AndroidRuntime(18952): FATAL EXCEPTION: main
04-02 11:03:57.922: E/AndroidRuntime(18952): java.lang.ArrayIndexOutOfBoundsException:   length=4; index=4
04-02 11:03:57.922: E/AndroidRuntime(18952):    at it.nad.cartellecliniche.fragment.SegmentoAnterioreFragment.onTaskComplete(SegmentoAnterioreFragment.java:471)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at it.nad.cartellecliniche.asynctask.LookupTask.onPostExecute(LookupTask.java:279)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at it.nad.cartellecliniche.asynctask.LookupTask.onPostExecute(LookupTask.java:1)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at android.os.AsyncTask.finish(AsyncTask.java:631)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at android.os.Looper.loop(Looper.java:137)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at android.app.ActivityThread.main(ActivityThread.java:5414)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at java.lang.reflect.Method.invokeNative(Native Method)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at java.lang.reflect.Method.invoke(Method.java:525)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
04-02 11:03:57.922: E/AndroidRuntime(18952):    at dalvik.system.NativeStart.main(Native Method)

这是代码:

else if (typeTask.equals("LookupSegmentoAnteriore")) {

            switch (resultOperation) {
                case 200: {
                    Object[] lista = (Object[]) output[2];

                    listaBulbo = (String[])lista[0];
                    Arrays.sort(listaBulbo);
                    listaApparatoLacrimale = (String[])lista[1];
                    Arrays.sort(listaApparatoLacrimale);
                    listaPalpebre = (String[])lista[2];
                    Arrays.sort(listaPalpebre);
                    listaCongiuntiva = (String[])lista[3];
                    Arrays.sort(listaCongiuntiva);
                    listaCornea = (String[])lista[4];
                    Arrays.sort(listaCornea);
                    listaAngolo = (String[])lista[5];
                    Arrays.sort(listaAngolo);
                    listaCamera_anteriore = (String[])lista[6];
                    Arrays.sort(listaCamera_anteriore);
                    listaIride = (String[])lista[7];
                    Arrays.sort(listaIride);
                    listaPupilla = (String[])lista[8];
                    Arrays.sort(listaPupilla);
                    listaCristallino = (String[])lista[9];
                    Arrays.sort(listaCristallino);
                    break;
                }
            }
        }

我已经将新元素添加到列表中

从:

listaCornea = (String[])lista[4];
Arrays.sort(listaCornea);

为:

listaCristallino = (String[])lista[9];
Arrays.sort(listaCristallino);
有人可以帮我解决这个问题吗?我不知道如何管理数组长度问题。我刚刚将新元素添加到列表中,但我不知道这是否是正确的形式。我需要调整阵列的大小吗?我怎么能这样做?

非常感谢

2 个答案:

答案 0 :(得分:3)

问题是您的数组可能声明只有4个房间,这意味着您可以访问最大索引3 但是在上面的代码中你会访问第4个索引,那么它会抱怨你的索引绑定了,你的长度是4,

你应该使用ArrayList而不是array,因为Array在声明后不能调整大小, 但你可以在arraylist中添加任意数量的对象。

ArrayList<Object> lista=new ArrayList<Object>();

答案 1 :(得分:2)

数组索引超出范围当您尝试访问数组中不可用的索引时,会出现异常。

您已指定。  Object[] lista = (Object[]) output[2];

这意味着你有两个元素。第一个是lista[0],第二个是lista[1]

现在您要访问lista[2]。这意味着您尝试访问Objeact[] lista中实际上不可用的第三个元素。所以它在SegmentoAnterioreFragment.onTaskComplete(SegmentoAnterioreFragment.java:471)

给出了例外

Arraylist是动态的arraylist。您可以直接添加和删除元素。您不需要指定元素限制。

您可以使用此arraylist而不是Object Array

ArrayList<Object> lista=new ArrayList<Object>();