我创建了一个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();
}
}
我读过的文字文件。
调试器的结果。如您所见,所有数组都具有相同的值。 Arraylist中的值将始终遵循缓冲区的值。
答案 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();
}