我只能从我的文本文件中读取一行代码

时间:2015-01-03 22:53:38

标签: android readline

所以我正在尝试在Android上创建一个待办事项列表,我可以在其中添加项目,然后在列表中动态显示。因此,当我在文本字段中输入文本然后按添加按钮时,列表将使用我刚刚创建的项目进行扩展。这一切都顺利,但如果我完全从我的内存堆中获取应用程序然后重新启动它,那就不行了。当我重新打开应用程序时,列表只包含一个项目,即我在关闭应用程序之前添加到列表中的最后一项。这是我的代码:

package be.oefeningen.filestorage;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.view.View.OnClickListener;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.io.InputStreamReader;




public class FileStorageActivity extends ListActivity implements OnClickListener {

    private ArrayList<String> values=new ArrayList<String>();
    InputStream inputStream;
    String line;

    @Override
    public void onClick(View v) {

        EditText editText=(EditText) findViewById(R.id.editText);
        String tekst=editText.getText().toString()+"\n";
        FileOutputStream outputStream;



        try {

            outputStream=openFileOutput("todoitems",MODE_PRIVATE);
            outputStream.write(tekst.getBytes());
            outputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            inputStream = openFileInput("todoitems");
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            line = reader.readLine();
            if (line != null){
                values.add(line);
            } else {
                inputStream.close();
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }


        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
        setListAdapter(adapter);

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            inputStream = openFileInput("todoitems");
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            line = reader.readLine();
            while (line != null){
                values.add(line);
                line = reader.readLine();
            }
                inputStream.close();

        }catch (Exception e)
        {
            e.printStackTrace();
        }


        setContentView(R.layout.activity_file_storage);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
        setListAdapter(adapter);
    }


}

1 个答案:

答案 0 :(得分:1)

可能的原因是,每次写入文件时,都会丢失旧数据。

替换此行

outputStream=openFileOutput("todoitems",MODE_PRIVATE);

这一行

outputStream=openFileOutput("todoitems", MODE_PRIVATE | MODE_APPEND);