java - EditView只显示文本文件的最后一行

标签 java android

我的应用程序将多行 EditView 的文本保存到文本文件中,但问题是,如果我重新启动应用程序,则只会恢复最后一行。 (也许FileOutputStream也可能只保存最后一行,我不确定 ́_(ツ)_/̅)

这是我的代码:

private static final String TAG = "EditDataActivity";
public static String Textfile = "test.txt";
private Button btnSave,btnDelete;
private EditText editable_item;
EditText Zutaten, Zubereitung;


DatabaseHelper mDatabaseHelper;

private String selectedName;
private int selectedID;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_data_layout);
    btnSave = (Button) findViewById(R.id.btnSave);
    btnDelete = (Button) findViewById(R.id.btnDelete);
    editable_item = (EditText) findViewById(R.id.editable_item);
    mDatabaseHelper = new DatabaseHelper(this);
    Zutaten = (EditText)findViewById(R.id.editText4);
    Zubereitung = (EditText)findViewById(R.id.editText2);
    Zutaten.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            try{
                EditText test = (EditText)findViewById(R.id.editable_item);
                String testText = test.getText().toString();
                String Textfile2 = testText + ".txt";
                EditText field = (EditText)findViewById(R.id.editText4);
                String text = field.getText().toString();
                FileOutputStream fos = openFileOutput(Textfile2, Context.MODE_PRIVATE);
                fos.write(text.getBytes());
                fos.close();
            }catch (IOException e){
                System.out.println("Error");
            }
        }
    });
    Intent receivedIntent = getIntent();


    selectedID = receivedIntent.getIntExtra("id",-1); //NOTE: -1 is just the default value


    selectedName = receivedIntent.getStringExtra("name");


    editable_item.setText(selectedName);

    btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try{
                EditText test = (EditText)findViewById(R.id.editable_item);
                String testText = test.getText().toString();
                String Textfile2 = testText + ".txt";

                EditText field = (EditText)findViewById(R.id.editText4);
                String text = field.getText().toString();
                FileOutputStream fos = openFileOutput(Textfile2, Context.MODE_PRIVATE);
                fos.write(text.getBytes());
                fos.close();

            }catch (IOException e){
                System.out.println("Error");
            }



            Toast.makeText(getApplicationContext(), "Rezept erfolgreich gespeichert!", Toast.LENGTH_SHORT).show();

            Intent back = new Intent(EditDataActivity.this, MainActivity.class);
            startActivity(back);
            String item = editable_item.getText().toString();
            if (!item.equals("")) {
                mDatabaseHelper.updateName(item, selectedID, selectedName);
            } else {
                toastMessage("Du musst das Rezept benennen!");

            }


        }

    });



    btnDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            try{
                EditText test = (EditText)findViewById(R.id.editable_item);
                String testText = test.getText().toString();
                String Textfile2 = testText + ".txt";

                EditText field = (EditText)findViewById(R.id.editText4);
                String text = field.getText().toString();
                FileOutputStream fos = openFileOutput(Textfile2, Context.MODE_APPEND);
                fos.write("".getBytes());
                fos.close();
                System.out.println("did it");

            }catch (IOException e){
                System.out.println("Error");
            }

            Intent back = new Intent(EditDataActivity.this, MainActivity.class);
            startActivity(back);
            mDatabaseHelper.deleteName(selectedID,selectedName);
            editable_item.setText("");
            toastMessage("Rezept erfolgreich gelöscht!");



        }


    });

}

private void toastMessage(String message){
    Toast.makeText(this,message, Toast.LENGTH_SHORT).show();
}
public void loadsavedfile(){

    try {

        EditText test1 = (EditText) findViewById(R.id.editable_item);
        String test1Text = test1.getText().toString();

        String Textfile2 = test1Text + ".txt";
        if (!Textfile2.isEmpty()) {


            FileInputStream fis = openFileInput(Textfile2);
            BufferedReader reader = new BufferedReader(new InputStreamReader(new DataInputStream(fis)));
            String test;


            EditText Test = (EditText) findViewById(R.id.editText4);

            while ((test = reader.readLine()) != null) {
                Test.setText(test);
            }
        }else{

        }
    }catch(IOException e){

    }

希望你能帮助我:) 谢谢!

最佳答案

就这么做

while ((test = reader.readLine()) != null) {
                Test.setText(Test.getText()+"\n" + test);
            }

当您使用 setText(test) 时,每次循环运行时它都会替换编辑文本中的文本,但您必须将新文本附加到最后一行。更好的方法是先创建 String,然后将其设置为 EditText,因为这样可以提高性能。

StringBuilder str = new StringBuilder();
while((test = reader.readLine()) != null)
    str.append('\n' + test);
Test.setText(str.toString());

希望这能解决您的问题。

关于java - EditView只显示文本文件的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57237166/

相关文章:

java - 如何在android中使用itext生成pdf

android - 如何在检索 ListView 的项目时显示 "Loading..."文本

java - 在 java 中录制流式音频?

java - "derby dialect has been deprecated"

java - Spring 配置 - 初始化代码的最佳实践

java - Listview删除项目和刷新 - android

android MediaPlayer NullPointerException

android - NumberPicker 中的 HTML 格式文本

java - 如何将多个JCombobox中的选定项插入数据库mysql? ( java )

java - 如何为工具栏中的图标设置点击事件