I am getting an ArrayOutOfBounds exception when I am using my custom array adapter.
I am wondering if there are any coding errors I have overlooked.
Here is the error log:
06-10 20:21:53.254: E/AndroidRuntime(315): FATAL EXCEPTION: main
06-10 20:21:53.254: E/AndroidRuntime(315): java.lang.RuntimeException: Unable to start activity ComponentInfo{alex.android.galaxy.tab.latest/alex.android.galaxy.tab.latest.Basic_db_output}: java.lang.ArrayIndexOutOfBoundsException
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.os.Handler.dispatchMessage(Handler.java:99)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.os.Looper.loop(Looper.java:123)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-10 20:21:53.254: E/AndroidRuntime(315): at java.lang.reflect.Method.invokeNative(Native Method)
06-10 20:21:53.254: E/AndroidRuntime(315): at java.lang.reflect.Method.invoke(Method.java:521)
06-10 20:21:53.254: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-10 20:21:53.254: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-10 20:21:53.254: E/AndroidRuntime(315): at dalvik.system.NativeStart.main(Native Method)
06-10 20:21:53.254: E/AndroidRuntime(315): Caused by: java.lang.ArrayIndexOutOfBoundsException
06-10 20:21:53.254: E/AndroidRuntime(315): at alex.android.galaxy.tab.latest.Basic_db_output.onCreate(Basic_db_output.java:44)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-10 20:21:53.254: E/AndroidRuntime(315): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
I am basing my code example on this: How to use ArrayAdapter<myClass>.
ArrayList<Question> list = new ArrayList<Question>();
for(int i=1; i <= 3; i++)
{
path = getAssets().open("quiz"+i+".txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Reader reader = new ResultsReader(path);
reader.read();
String str = ((ResultsReader)reader).getInput();
String data[] = str.split("<.>");
Question q = new Question();
q.question = data[0];
q.answer = Integer.parseInt(data[1]);
q.choice1 = data[2];
q.choice2 = data[3];
q.choice3 = data[4];
list.add(q);
}
When you do
it is going to return you an array of uncertain length, unless you know the input is correct all the time you are going to run into issues when you do the below:
Perhaps you should think of another technique where you don’t rely on calling explicit index’s of your array.
For example:
or add some more debug before you use the split data array:
Edit
Oh yeah the issue will be the emulator / your phone hasn’t got a clue what
is.