Это мой первый вопрос, но я постараюсь задать его хорошо. Во всяком случае, я пытаюсь прочитать данные из текстового файла в Android, но по какой-то причине он не возвращает ничего, а именно, исключение IndexOutOfBounds. Весь соответствующий код:
public Question getNextQuestion(int num) {
Log.d(TAG, array.toString());
return array.get(num+1);
}
public ArrayList<Question> getData(String str) throws NumberFormatException, IOException {
Log.d(TAG, "STARTING getData");
Log.d(TAG, str);
ArrayList<Question> a = new ArrayList<Question>();
String[] strline = str.split("//");
for (int j = 0; j < strline.length; j++) {
if (strline[j] == null) {
strline[j] = "TESTING";
Log.d(TAG, strline[j]);
}
}
int num = 0;
int x = 0;
String y = strline[x];
while (x == 0 || y != null) {
num++;
String[] data = y.split("//");
Log.d(TAG, y);
if (data.length >= 7) {
a.add(new Question(Integer.parseInt(data[0]), data[1], data[2], data[3], data[4], data[5], Integer.parseInt(data[6])));
Log.d(TAG, a.get(a.size()).getText());
}
else if (data.length >= 3) {
a.add(new Question(Integer.parseInt(data[0]), data[1], data[2]));
Log.d(TAG, a.get(a.size()).getText());
}
x++;
if (x < strline.length)
y = strline[x];
else
break;
}
for (int i=0; i<a.size(); i++){
Log.d(TAG, a.get(i).getText());
}
Log.d(TAG, "ENDING getdata");
return a;
}
public ArrayList<Question> openFile() throws IOException {
Log.d(TAG, "STARTING openFile()");
//FileReader fr = new FileReader("data/data/scibowl.prog/questionsb.txt");
FileInputStream fis;
String storedString = "";
try {
fis = openFileInput("questionsb.txt");
DataInputStream dataIO = new DataInputStream(fis);
String strLine = null;
while ((strLine = dataIO.readLine()) != null) {
storedString = storedString + strLine;
}
dataIO.close();
fis.close();
}
catch (Exception e) {
}
array = getData(storedString);
Log.d(TAG, "DID open file, ending openFile()");
return array;
}
Это напечатает в LogCat:
onCreate done
STARTING openFile()
STARTING getData
ENDING getdata
DID open file, ending openFile()
right before Toast.makeText
[]
Caused by: java.lang.IndexOutOfBoundsException: Invalid location 1, size is 0
at java.util.ArrayList.get(ArrayList.java:341)
at scibowl.prog.Round.getNextQuestion(Round.java:55)
at scibowl.prog.RoundView.<init>(RoundView.java:26)
at scibowl.prog.Round.onCreate(Round.java:35)
Я перепробовал практически все, от StringBuffers до FileInputStreams и BufferedReaders, и прочитал соответствующую документацию по Android, хотя не стесняйтесь сказать мне, что я не читаю это достаточно сложно. Кто-нибудь знает, почему я продолжаю получать массивы без элементов?
Текстовый файл для справки, хотя и слегка отредактированный в соответствии с правилами цитаты:
1 // О стандартном электромагнитном спектре, какая частота между гамма-лучами и ультрафиолетовыми лучами? // Радиоволны // Микроволны // Рентгеновские лучи // Инфракрасные волны // 1
2 // Какие волны в электромагнитном спектре приблизительно охватывают частоты от 10 ^ 9 Гц до 10 ^ 12 Гц? // Видимый свет // Гамма-лучи // Ультрафиолетовые лучи // Микроволны // 3
3 // Приблизительно, какой процент власти США исходит от угля? // 30% // 40% // 50% // 60% // 0
4 // Если 100-килограммовый человек начинает ходить от отдыха и разгоняется до 4,0 м / с в течение 2 секунд при постоянном ускорении, какую работу он выполняет? // 600 Дж // 800 Дж // 1200 Дж / / 2000 Дж // 1