将文本文件读入ListView(应用程序添加到ListView两次)?

时间:2016-06-15 00:34:26

标签: java android listview

我对Android Studio比较陌生。基本上我要做的是为QR扫描仪创建一种历史文件。我扫描的任何内容都会进入History.txt文件。它工作但不是我想要的方式。这是在第一次扫描后检查历史记录的结果:

Result of First Scan

当我检查第二次扫描时会发生这种情况:

Result of Second Scan

这是我的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。任何一点帮助将不胜感激。非常感谢你。

1 个答案:

答案 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