Android Arraylist <string []>始终遵循String []变量的值

时间:2016-03-19 17:48:50

标签: android arraylist

我创建了一个ArrayList。我从Android手机上读取文本文件并在每个数组中存储String [3]。我使用调试器来跟踪每个变量的值。 ArrayList中的值似乎总是遵循缓冲区的值。它们之间是否有任何链接?

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中的值将始终遵循缓冲区的值。

As you can see, all arrays have same value

2 个答案:

答案 0 :(得分: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();
    }
}

希望有所帮助

答案 1 :(得分:0)

我发现了自己的错误。添加 buffer = new String [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();
}