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

标签 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());
}

这是显示历史记录的 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/

相关文章:

java - 计算两个未知点之间的俯仰和偏航

java - 从自定义 listView 中的 Spinner 的 onItemSelected 执行代码

java - 设置 ListSelectionListener

android - 如何在 DBFlow 中进行复杂查询?

android - libz.so.1 : cannot open shared object file

java - 这行代码应该绘制一个图表。但它并没有策划任何事情。它只是显示轴

android嵌套 ListView

java - 需要帮助刷新我的应用程序中的数据库 ListView

java - 具有多种类型的 REST PathParam

java - 在何处以及如何实例化输入映射和 Action 映射