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

我有这个错误:

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); 

有人可以帮我解决这个问题吗? 我不知道如何管理数组长度问题。 我刚刚将新元素添加到列表中,但我不知道这是否是正确的forms。 我需要调整arrays的大小吗? 我怎么能这样做?

非常感谢

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

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

 ArrayList lista=new ArrayList(); 

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

你已经指定了。 Object[] lista = (Object[]) output[2];

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

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

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

你可以使用这个arraylist而不是Object Array

 ArrayList lista=new ArrayList();