无法捕获ArrayIndexOutOfBoundsException

时间:2013-10-18 01:41:17

标签: java android exception arraylist indexoutofboundsexception

我目前正在导致IndexOutOfBoundsException我似乎无法追查。我有一个由String[]填充的Spinner。根据设备制造商的不同,String[] (and hence Spinner object)将包含3个值或1个值。

我将保存的微调器选项存储为int中的SharedPreferences并在创建Activity时加载。

如果Spinner只有1个值,如果它加载SharedPreferences并且保存的值是2,我设置该微调器选择项目位置2,它会崩溃(显然)。我试图捕获该异常,以便我可以将其设置为0,但我似乎无法捕捉到Exception

代码结构如下:

Populate Spinner according to something
Load up Saved Preferences
Check some value of saved preferences
try{
Set Spinner with that Preference
}
catch(Exception e)
{
Set Spinner with default value of 0
}

堆栈跟踪:

10-18 12:49:32.885: E/AndroidRuntime(15327): FATAL EXCEPTION: main 10-18 12:49:32.885: E/AndroidRuntime(15327): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1 10-18 12:49:32.885: E/AndroidRuntime(15327): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 10-18 12:49:32.885: E/AndroidRuntime(15327): at java.util.ArrayList.get(ArrayList.java:304) 10-18 12:49:32.885: E/AndroidRuntime(15327): at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 10-18 12:49:32.885: E/AndroidRuntime(15327): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390)

1 个答案:

答案 0 :(得分:1)

甚至更好:如果您确切地知道可能抛出的异常,那就抓住它而不是通用的RunTimeException。

try{
    Set Spinner with that Preference 
}catch(IndexOutOfBoundsException e){
    Set Spinner with default value of 0
}

这使得任何阅读代码的人都清楚地知道发生了什么。

此外,使用try / catch处理运行时异常并不是很好的方式。在尝试使用数组之前检查数组长度必须更好。如果长度太短,你可以进入一个else循环或其他东西,并设置Spinner的默认值为0,但不会抛出异常。这使得您的代码更容易阅读,并且使得另一个开发人员出现的可能性大大降低,并且无法准确理解您的try / catch块正在做什么以及破坏您的代码。

相关问题