我对 Android Studio 比较陌生。基本上我想做的是为 QR 扫描仪创建一种历史文件。我扫描的所有内容都会进入 History.txt 文件。它有效,但不是我想要的方式。这是第一次扫描后检查历史记录的结果:
这就是我检查第二次扫描时发生的情况:
这是我的 OutputWriter 代码:
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("History.txt", Context.MODE_APPEND));
outputStreamWriter.write(rawResult.getText()); // the scan result
outputStreamWriter.append("\n\r");
outputStreamWriter.close();
} catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
这是显示历史记录的 Activity:
public class ResultsActivity extends AppCompatActivity {
ListView ResultsListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
ResultsListView = (ListView) findViewById(R.id.ResultsListView);
readFromFile();
}
private String readFromFile() {
String ret = "";
ArrayList<String> lines = new ArrayList<>(); // stores lines from text file.
try {
InputStream inputStream = openFileInput("History.txt");
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine() ) != null ) {
stringBuilder.append(receiveString);
lines.add(stringBuilder.toString());
}
inputStream.close();
// put results in ListView
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, lines);
ResultsListView.setAdapter(adapter);
}
} catch (FileNotFoundException e) {
Log.e("Exception", "File not found: " + e.toString());
} catch (IOException e) {
Log.e("Exception", "Can not read file: " + e.toString());
}
return ret;
}
}
我不确定为什么东西在 ListView 中出现两次。看了一会儿,却什么也没看到。如果这只是一个简单的错误,我深表歉意。我仍在熟悉 Android Studio。任何一点帮助将不胜感激。非常感谢。
最佳答案
我正在查看这段代码:
while ( (receiveString = bufferedReader.readLine() ) != null ) {
stringBuilder.append(receiveString);
lines.add(stringBuilder.toString());
}
您要将一行附加到stringBuilder
,然后将整个字符串添加到适配器,这样某些行将被添加多次。我认为你的意思是这样做:
while ( (receiveString = bufferedReader.readLine() ) != null ) {
stringBuilder.append(receiveString);
lines.add(receiveString);
}
也许您并不真正需要stringBuilder
。
关于java - 将文本文件读入 ListView(应用程序添加到 ListView 两次)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824298/