2016-03-19 8 views
0

私はArrayListを作成しました。私はAndroidの携帯電話からテキストファイルを読み込み、各配列にString [3]を格納します。デバッガを使用して、各変数の値をトレースしました。 ArrayListの値は、常にbufferの値のように見えます。それらの間にリンクはありますか?Android Arraylist <String[]>は常にString []変数の値に従います

ArrayList<String[]> label_list = new ArrayList<>(); 

try { 
    FileInputStream fIn = new FileInputStream(getPath()); 
    BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); 
    String aDataRow = ""; 
    String[] buffer = new String[3]; 
    int j=0; 
    while ((aDataRow = myReader.readLine()) != null) { 
     if(!aDataRow.equals("")){ 
      buffer[j]=aDataRow; 
      j++; 
     }else{ 
      label_list.add(buffer); 
      j=0; 
     } 
    } 
    label_list.add(buffer); //for last one 
    myReader.close(); 
    for(int i=0;i<label_list.size();i++){ 
     txt_show.append(label_list.get(i)[0]); 
    } 

    } catch (Exception e) { 
     Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
} 

私が読んだテキストファイル。

The text file i read

デバッガの結果。ご覧のとおり、すべての配列は同じ値を持ちます。 Arraylistの値は常にbufferの値に従います。

As you can see, all arrays have same value

答えて

0

あなたはそのj++if elseのうち条件をつけなければなりません。

ArrayList<String[]> label_list = new ArrayList<>(); 

try { 
    FileInputStream fIn = new FileInputStream(getPath()); 
    BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); 
    String aDataRow = ""; 
    String[] buffer = new String[3]; 
    int j=0; 
    while ((aDataRow = myReader.readLine()) != null) { 
     if(!aDataRow.equals("")){ 
      buffer[j]=aDataRow; 

     }else{ 
      label_list.add(buffer); 

     } 
      j++; 
    } 
    label_list.add(buffer); //for last one 
    myReader.close(); 
    for(int i=0;i<label_list.size();i++){ 
     txt_show.append(label_list.get(i)[0]); 
    } 

    } catch (Exception e) { 
     Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
} 

は、それは私が私のミスを見つけた

+0

私は試しましたが運はありません。実際にはデバッグ中に、label_list.add(バッファ)を除いてすべて正常に動作することがわかりました。以前の値を上書きします。とにかくありがとう。 – SamTew

0

に役立ちます願っています。追加バッファ=新しい文字列[3];は私の問題を解決しますが、私はその理由を知らない。誰も私に説明することはできますか?

try { 
    FileInputStream fIn = new FileInputStream(getPath()); 
    BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); 
    String aDataRow = ""; 
    String[] buffer = new String[3]; 
    int j=0; 
    while ((aDataRow = myReader.readLine()) != null) { 
     if(!aDataRow.equals("")){ 
      buffer[j]=aDataRow; 
      j++; 
     }else{ 
      label_list.add(buffer); 
      j=0; 
      **buffer = new String[3];** 
     } 
    } 
    myReader.close(); 
    for(int i=0;i<label_list.size();i++){ 
     txt_show.append(label_list.get(i)[0]); 
    } 

} catch (Exception e) { 
    Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
} 
関連する問題