我得到了一个我无法解决的ArrayIndexOutOfBoundsException。
简而言之,它是一款儿童应用程序,用于学习字母,数字和其他七类常见对象的名称。它显示对象/字符/数字的图像,下面是文本名称,以及点击对象时名称的相应音频。
用户可以选择英语或阿拉伯语。
除阿拉伯字母外,其他所有内容均有效,但阿拉伯文字母的字符串数组会抛出异常。
以下是一个有效的小类别的示例:
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>
然而,当涉及到这些字母时,&#39;类别有一个重要的区别 - 阿拉伯字母表中有28个字母,而英语中有26个字母。
所以对于&#39;字母&#39;的代码类别:
if (categoryNumber == 3) {
//Letters
Resources resources = getResources();
if(language == 0) {
if (letter == 0) {
items = resources.getStringArray(R.array.letters);
}
if (letter == 1) {
items = resources.getStringArray(R.array.letters_caps);
}
if (letter == 2) {
items = resources.getStringArray(R.array.letters_mixed);
}
} else if (language == 1) {
items = resources.getStringArray(R.array.letters_arabic);
}
和相应的阿拉伯数组:
</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 20:14:07.741:E / AndroidRuntime(4577):java.lang.RuntimeException:无法启动活动ComponentInfo {com.allababiditech.academics / com.allababiditech.academics.LevelOneActivity}:java.lang。 ArrayIndexOutOfBoundsException:length = 27;指数= 28
当我使用英文字符替换完全不同的28个项目数组时,我会得到相同的例外。
如果我用英文字母文本数组替换阿拉伯语图像和音频工作正常(至少在前26位)。
如果我使用英文文本数组并添加两个重复的英文字符,我只得到相同的例外,现在长度和索引还有两个。
如果我使用任何其他类别的替代品&#39;英文或阿拉伯文的文本数组,只要数组中有26个或更少的文本项,阿拉伯语图像和音频就可以处理文本项的数量。 (&#39;字母&#39;是所有类别中最长的数组。)
我认为阿拉伯语比英语字母多,这并不重要,因为所有内容都基于字符串数组中的项目数,因此items.length将是28而不是26。
我整天都在对着显示器敲打着我的头,我希望有人不介意偷看,并指出我真正的简单明显的错误没有看到。非常感谢。
编辑:对不起,没有把它放进去,因为它非常简单并适用于其他所有内容。 in onCreate:itemNumber = 0; ...
categoryItem = (Button) findViewById(R.id.button1);
categoryItem.setText(items[itemNumber]);
然后当然这会随着孩子从一个物体前进到下一个物体而迭代。
09-01 22:18:09.586:E / AndroidRuntime(9524):致命异常:主要 09-01 22:18:09.586:E / AndroidRuntime(9524):java.lang.RuntimeException:无法启动活动ComponentInfo {com.allababiditech.academics / com.allababiditech.academics.LevelOneActivity}:java.lang.ArrayIndexOutOfBoundsException:length = 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):at java.lang.reflect.Method.invokeNative(Native Method) 09-01 22:18:09.586:E / AndroidRuntime(9524):at java.lang.reflect.Method.invoke(Method.java:511) 09-01 22:18:09.586:E / AndroidRuntime(9524):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1038) 09-01 22:18:09.586:E / AndroidRuntime(9524):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 09-01 22:18:09.586:E / AndroidRuntime(9524):at dalvik.system.NativeStart.main(Native Method) 09-01 22:18:09.586:E / AndroidRuntime(9524):引起:java.lang.ArrayIndexOutOfBoundsException:length = 27;指数= 28 09-01 22:18:09.586:E / AndroidRuntime(9524):at com.allababiditech.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 more
答案 0 :(得分:0)
具有28个项目的数组的最大现有索引是27 - 因为数组索引在Java(以及大多数其他编程语言)中以0开头。您似乎从1到28开始计数,这会导致异常。