在可能的rooted手机上获取`arraylist.get(something)`的`java.lang.IndexOutOfBoundsException`或`IllegalArgumentException`,android

时间:2017-09-07 07:52:09

标签: java android arraylist

我从播放控制台收到崩溃报告,说有java.lang.IndexOutOfBoundsExceptionIllegalArgumentException,但后者不常见。当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

请帮忙。感谢。

1 个答案:

答案 0 :(得分:2)

如果arraylist.size()<= 3,则变量size将保留0

var = random.nextInt(size)将抛出java.lang.IllegalArgumentException,因为界限必须为正