我对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());
}
这是显示历史记录的活动:
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。任何一点帮助将不胜感激。非常感谢你。
答案 0 :(得分:0)
我正在看这段代码:
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
。