Android ArrayIndexOutOfBoundsException似乎计数错误的数组

Android ArrayIndexOutOfBoundsException似乎计数错误的数组,android,indexoutofboundsexception,Android,Indexoutofboundsexception,我有一个ArrayIndexOutofBounds的感觉,我就是无法解决 简而言之,它是一款儿童应用程序,用于学习字母、数字和其他七类常见对象的名称。它显示一个对象/字符/数字的图像,下面是文本中的名称,并在点击对象时显示相应的名称音频 用户可以选择英语或阿拉伯语 除了阿拉伯文字母之外,所有的东西都能正常工作,只有阿拉伯文文本中字母的字符串数组抛出了一个例外 下面是一个小类别的示例: if (categoryNumber == 2) { //Colors

我有一个ArrayIndexOutofBounds的感觉,我就是无法解决

简而言之,它是一款儿童应用程序,用于学习字母、数字和其他七类常见对象的名称。它显示一个对象/字符/数字的图像,下面是文本中的名称,并在点击对象时显示相应的名称音频

用户可以选择英语或阿拉伯语

除了阿拉伯文字母之外,所有的东西都能正常工作,只有阿拉伯文文本中字母的字符串数组抛出了一个例外

下面是一个小类别的示例:

        if (categoryNumber == 2) {
        //Colors
        Resources resources = getResources();
        items = resources.getStringArray(R.array.colors);
        if (language == 0) {            
            if (letter == 0) {
                items = resources.getStringArray(R.array.colors);
            }
            if (letter == 1) {
                items = resources.getStringArray(R.array.colors_caps);
                }
            if (letter == 2) {
                items = resources.getStringArray(R.array.colors_mixed);
            } 
        } else if (language == 1 ) {
            items = resources.getStringArray(R.array.colors_arabic);
        }
以第一个字符串数组为例:

    <string-array name="colors">
    <item>red</item>
    <item>yellow</item>
    <item>blue</item>
    <item>green</item>
    <item>pink</item>
    <item>orange</item>
    <item>black</item>
    <item>white</item>
    <item>brown</item>
    <item>purple</item>
    <item>gold</item>
    <item>silver</item>
</string-array>
以及相应的阿拉伯语数组:

    <string-array name="colors_arabic">
    <!-- red -->
    <item>أحمر</item>
    <!-- yellow -->
    <item>أصفر</item>
    <!-- blue -->
    <item>أزرق</item>
    <!-- green -->
    <item>أخضر</item>
    <!-- pink -->
    <item>وردي</item>
    <!-- orange -->
    <item>البرتقالي</item>
    <!-- black -->
    <item>أسود</item>
    <!-- white -->
    <item>أبيض</item>
    <!-- brown -->
    <item>بني</item>
    <!-- purple -->
    <item>بنفسجي</item>
    <!-- gold -->
    <item>ذهبي</item>
    <!-- silver -->
    <item>فضي</item>
</string-array>
    </string-array>
    <string-array name="letters_arabic">
    <!-- arabicletterone  -->
    <item>أ</item>
    <!-- arabiclettertwo -->
    <item>ب</item>
    <!-- arabicletterthree -->
    <item>ت</item>
    <!-- arabicletterfour -->
    <item>ث</item>
    <!-- arabicletterfive -->
    <item>ج</item>
    <!-- arabiclettersix -->
    <item>ح</item>
    <!-- arabicletterseven -->
    <item>خ</item>
    <!-- arabiclettereight -->
    <item>د</item>
    <!-- arabicletternine -->
    <item>ذ</item>
    <!-- arabicletterten -->
    <item>ر</item>
    <!-- arabiclettereleven -->
    <item>ز</item>
    <!-- arabiclettertwelve -->
    <item>س</item>
    <!-- arabicletterthirteen -->
    <item>ش</item>
    <!-- arabicletterfourteen -->
    <item>ص</item>
    <!-- arabicletterfifteen -->
    <item>ض</item>
    <!-- arabiclettersixteen -->
    <item>ط</item>
    <!-- arabicletterseventeen -->
    <item>ظ</item>
    <!-- arabiclettereighteen -->
    <item>ع</item>
    <!-- arabicletternineteen -->
    <item>غ</item>
    <!-- arabiclettertwenty -->
    <item>ف</item>
    <!-- arabiclettertwentyone -->
    <item>ق</item>
    <!-- arabiclettertwentytwo -->
    <item>ك</item>
    <!-- arabiclettertwentythree -->
    <item>ل</item>
    <!-- arabiclettertwentyfour -->
    <item>م</item>
    <!-- arabiclettertwentyfive -->
    <item>ن</item>
    <!-- arabiclettertwentysix -->
    <item>ه</item>
    <!-- arabiclettertwentyseven -->
    <item>و</item>
    <!-- arabiclettertwentyeight -->
    <item>ي</item>
</string-array>
当然,稍后,当子对象从一个对象前进到下一个对象时,会进行迭代

09-01 22:18:09.586:E/AndroidRuntime(9524):致命异常:主 09-01 22:18:09.586:E/AndroidRuntime(9524):java.lang.RuntimeException:无法启动活动组件信息{com.allababidtech.academics/com.allababidtech.academics.LevelOneActivity}:java.lang.ArrayIndexOutOfBoundsException:长度=27;指数=28 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)上 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)上 09-01 22:18:09.586:E/AndroidRuntime(9524):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.ActivityThread.access$700(ActivityThread.java:140) 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.os.Handler.dispatchMessage(Handler.java:99)上 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.os.Looper.loop(Looper.java:137)上 09-01 22:18:09.586:E/AndroidRuntime(9524):位于android.app.ActivityThread.main(ActivityThread.java:4921) 09-01 22:18:09.586:E/AndroidRuntime(9524):位于java.lang.reflect.Method.Invokenactive(本机方法) 09-01 22:18:09.586:E/AndroidRuntime(9524):位于java.lang.reflect.Method.invoke(Method.java:511) 09-01 22:18:09.586:E/AndroidRuntime(9524):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 09-01 22:18:09.586:E/AndroidRuntime(9524):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 9-01 22:18:09.586:E/AndroidRuntime(9524):在dalvik.system.NativeStart.main(本机方法) 09-01 22:18:09.586:E/AndroidRuntime(9524):由以下原因引起:java.lang.ArrayIndexOutOfBoundsException:length=27;指数=28 09-01 22:18:09.586:E/AndroidRuntime(9524):位于com.allababidtech.academics.LevelOneActivity.onCreate(LevelOneActivity.java:1454) 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.Activity.performCreate(Activity.java:5206)上 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)上 09-01 22:18:09.586:E/AndroidRuntime(9524):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
09-01 22:18:09.586:E/AndroidRuntime(9524):。。。11更多

对于包含28项的数组,现有的最大索引是27项,因为在Java(以及大多数其他编程语言)中,数组索引以0开头。似乎从1开始计数到28,这导致了异常

您可以发布完整的堆栈跟踪和LevelOneActivity吗?在访问阿拉伯字母数组的位置发布代码块。你永远不应该达到“index=28”,因为最大/最高索引是27(即总共28个字母)。是的,除非我明确地从0开始,它适用于英语和阿拉伯语的其他八个类别,再加上英语的这个类别。这正是我挂断电话的原因。。。为什么会有不同的表现呢?所以,我完全忘记了我的阿拉伯数字数组,它显示了孩子正在观看的项目的数量,它只显示了26个(我们最初没有阿拉伯选项)。虽然我理解索引顺序和长度的关系,但正是你提到的计数重新启动了我那出故障的脑细胞。谢谢
    </string-array>
    <string-array name="letters_arabic">
    <!-- arabicletterone  -->
    <item>أ</item>
    <!-- arabiclettertwo -->
    <item>ب</item>
    <!-- arabicletterthree -->
    <item>ت</item>
    <!-- arabicletterfour -->
    <item>ث</item>
    <!-- arabicletterfive -->
    <item>ج</item>
    <!-- arabiclettersix -->
    <item>ح</item>
    <!-- arabicletterseven -->
    <item>خ</item>
    <!-- arabiclettereight -->
    <item>د</item>
    <!-- arabicletternine -->
    <item>ذ</item>
    <!-- arabicletterten -->
    <item>ر</item>
    <!-- arabiclettereleven -->
    <item>ز</item>
    <!-- arabiclettertwelve -->
    <item>س</item>
    <!-- arabicletterthirteen -->
    <item>ش</item>
    <!-- arabicletterfourteen -->
    <item>ص</item>
    <!-- arabicletterfifteen -->
    <item>ض</item>
    <!-- arabiclettersixteen -->
    <item>ط</item>
    <!-- arabicletterseventeen -->
    <item>ظ</item>
    <!-- arabiclettereighteen -->
    <item>ع</item>
    <!-- arabicletternineteen -->
    <item>غ</item>
    <!-- arabiclettertwenty -->
    <item>ف</item>
    <!-- arabiclettertwentyone -->
    <item>ق</item>
    <!-- arabiclettertwentytwo -->
    <item>ك</item>
    <!-- arabiclettertwentythree -->
    <item>ل</item>
    <!-- arabiclettertwentyfour -->
    <item>م</item>
    <!-- arabiclettertwentyfive -->
    <item>ن</item>
    <!-- arabiclettertwentysix -->
    <item>ه</item>
    <!-- arabiclettertwentyseven -->
    <item>و</item>
    <!-- arabiclettertwentyeight -->
    <item>ي</item>
</string-array>
itemNumber = 0; ...
categoryItem = (Button) findViewById(R.id.button1);
categoryItem.setText(items[itemNumber]);