2012-01-13 11 views
0

私はアンドロイドマーケットで、ユーザが時々間違ったエラーを報告するアプリを持っています。ArrayIndexOutofBounds(強制終了)。私はこのエラーを自分で経験したことがないので、問題を理解することは難しいです。私はもっ​​と才能のあるプログラマが見てくれることを期待していました。このファイルダイアログを表示する人がいるときに起こります。Android arrayindexoutofboundsエラー

public void fileDialog() { 
    // TODO Auto-generated method stub 
    d = new Dialog(this); 
    d.setTitle("Choose the song file"); 
    if (canWriteToFlash()) { 

    ScrollView sview = new ScrollView(this); 
    LinearLayout holder = new LinearLayout(this); 
    holder.setOrientation(1); 

    String path = Environment.getExternalStorageDirectory().getPath() 
     + File.separator + "Music" + File.separator; 

    File folder = new File(path); 
    File[] listOfFiles = folder.listFiles(); 
    int count = 0; 
    // count files in directory 
    for (int i = 0; i < listOfFiles.length; i++) { 

     if (listOfFiles[i].isFile()) { 
      count++; 

     } 
    } 
    if (count == 0) { 
    TextView empty1 = new TextView(this); 
     empty1.setText("The folder sdcard/Music, is empty. You must add song files in order to attach music to lyrics."); 
     empty1.setTextSize(18); 
     empty1.setPadding(8, 0, 8, 8); 
     holder.addView(empty1); 
    } 

    // turn files into string array 
    String[] sfiles = new String[count]; 
    for (int i = 0; i < listOfFiles.length; i++) { 
     if (listOfFiles[i].isFile()) { 
      sfiles[i] = listOfFiles[i].getName(); 
     } 
    } 
    // Sort Array case insenstive 
    Arrays.sort(sfiles, String.CASE_INSENSITIVE_ORDER); 
    // create text 
    TextView[] t1 = new TextView[(count)]; 
    for (int i = 0; i < listOfFiles.length; i++) { 
     if (listOfFiles[i].isFile()) { 
      t1[i] = new TextView(this); 
      t1[i].setText(sfiles[i]); 
      t1[i].setPadding(7, 8, 7, 8); 
      t1[i].setTextSize(18); 
      holder.addView(t1[i]); 
     } 
    } 
    // Create Click 
    for (int i = 0; i < listOfFiles.length; i++) { 
     if (listOfFiles[i].isFile()) { 
     final TextView thetext = t1[i]; 
     thetext.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
      // TODO Auto-generated method stub 
       songname = (String) thetext.getText(); 
       songfile.setText(songname); 
       d.cancel(); 
      } 
     }); 
    } 
    } 

    sview.addView(holder); 
    d.setContentView(sview); 
     } else { 
     TextView usbt = new TextView(this); 
     usbt.setText("Cannot communicate with sdcard! Make sure that USB connected is not enabled. Or try unplugging your USB cord."); 
     usbt.setPadding(7, 8, 7, 8); 
      usbt.setTextSize(18); 
     d.setContentView(usbt); 
    } 

    d.show(); 
} 
+0

print(listOfFiles.length)、出力は何ですか? –

答えて

0

私はこのようないけない:[i]の[i]をlistOfFilesと同じ位置を持っているあなたはsFilesを想定している

if (listOfFiles[i].isFile()) { 
      t1[i] = new TextView(this); 
      t1[i].setText(sfiles[i]); 
      t1[i].setPadding(7, 8, 7, 8); 
      t1[i].setTextSize(18); 
      holder.addView(t1[i]); 
     } 

ができますが、同じファイルを前に注文したので、多分そのありませんか?

とにかく、それ以外にも同じことを何度も繰り返し求めています。 (if(listOfFiles [i] .isFile()){}完全なスタックトレースがある場合は、それを投稿してください。

0

"TextView"を最終として宣言しました。最終フィールドにオブジェクトへの参照を格納すると、参照が不変になります。それは何の問題も生じていないのですか?

関連する問題