我的应用程序将多行 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/