我从播放控制台收到崩溃报告,说有java.lang.IndexOutOfBoundsException
或IllegalArgumentException
,但后者不常见。当arraylist.get(something)
执行时会发生这种情况,其中某些内容是 int ,它是通过将size = arraylist.size();
传递给something = random.nextInt(size)
获得的。
当应用程序加载时,它会读取一堆数据并填充arraylist,然后启动mainActivity,依此类推。
现在我知道你在想什么,这一定是一个简单的例子,说明了arraylist的错误大小或类似的东西。但不,我已经确定首先检查,如果传递给random.nextInt(size)
的大小大于0,我也这样做,
size = arraylist.size() - 3;
虽然没有必要这样做。 此外,我知道我的阵列将具有固定大小,1010 。这是静态的。我在应用程序启动时加载一次,之后没有更改。
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2726)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2787)
at android.app.ActivityThread.-wrap12 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1504)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6247)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762)
Caused by: java.lang.IndexOutOfBoundsException:
at java.util.ArrayList.get (ArrayList.java:411)
at myapp.app.Spelling.nextWord (Spelling.java:346)
at myapp.app.Spelling.onCreate (Spelling.java:120)
at android.app.Activity.performCreate (Activity.java:6757)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2679)
-
size_of_wor = StartDisplay.wor.size() - 3;
public void nextWord() {
display.setTextColor(Color.parseColor("#000000"));
submit.setText("OK");
if (size_of_wor > 0)
rend = random.nextInt(size_of_wor);
else
Toast.makeText(this,"Please restart app",Toast.LENGTH_LONG).show();
givenWord = StartDisplay.wor.get(rend);// crashes here
theWord = givenWord.getw();
String placeholder = "hint : " + givenWord.getm();
soundHint.setText(placeholder);
spellSound();
}
但无论我做什么,我仍然会收到崩溃报告。到目前为止,我还没有能够在我的设备上重现此崩溃,我在模拟器上使用Android K,M,L,N尝试了它,但仍然没有崩溃。
我正在使用Android支持版本23.3.1
请帮忙。感谢。
答案 0 :(得分:2)
如果arraylist.size()
为<= 3
,则变量size
将保留0
var = random.nextInt(size)
将抛出java.lang.IllegalArgumentException
,因为界限必须为正