2012-02-25 13 views
0

これは私の最初の質問ですが、私はそれをよく尋ねます。とにかく、私はAndroidのテキストファイルからデータを読み込もうとしていますが、何らかの理由で何も返しません。つまり、IndexOutOfBounds例外です。関連するすべてのコード:Androidのテキストファイルからデータを読み込むと何も返されません。

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) 

私は私に言うこと自由に感じしかし、BufferedReadersへStringBuffersからFileInputStreamsと実質的にすべてを試み、および関連するAndroidのドキュメントを読みました私は十分にそれを読んでいないよ。誰も私がなぜ要素を持たない配列を取得し続けるのか知っていますか?

わずかBLOCKQUOTE規則に適合するように編集されたにもかかわらず、参照のためにテキストファイル:周波数はγ線と紫外線の間であり、標準的な電磁スペクトル、//電波//で

1 //マイクロ波// X線/ /赤外線// 1

2 //電磁波の波は、およそ10^9Hz~10^12Hzの周波数を含みますか?//可視光//ガンマ線//紫外光//マイクロ波// 3

3 //米国のpoのおよそ何パーセント// 30%// 40%// 50%// 60%// 0

4 // 100キロの人が休息から歩き始め、4.0m/s以上に加速した場合一定の加速度で秒、彼がどれだけ仕事をするのでしょうか?// 600 // J 800 J // 1200 J // 2000 J // 1つの

答えて

1

あなたのlogcatは、それが法にライン55にクラッシュし示唆getNextQuestion 、私はあると信じている:

return array.get(num+1); 

また、あなたのlogcatは、あなたが存在しない配列の値にアクセスしようとしていることを示唆しています。つまり、インデックス1(2番目のアイテム)のアイテムを取得しようとしていますが、配列のサイズは0なので、取得できるアイテムはありません。

したがって、getDataにはあなたが実際にArrayListを返すことに失敗している可能性があります。または返信するArrayListは空です。

+0

ええ、申し訳ありませんが、logcatの空のArrayListはgetdata()からのものです。私はまだ何がうまくいかないのか分からない。 – biblioman

+0

おかげで、申し訳ありませんが、私はそれを理解し終えました - しかし、どのように忘れてください。 – biblioman

関連する問題