Ошибка создания файла в приложении Андроид
На самом деле как таковой ошибки нет, но есть сообщение об ошибке Есть читалка, в меню которой есть пункт "Заметка", по его нажатию приложение переходит в новую активность, на экране которой поле для ввода текста, чтобы сделать заметку к тексту файла. При отсутствии заметки она создается, при наличии - открывается имеющаяся Количество файлов для чтения ограничено разработчиком, следовательно итоговое количество заметок равно ему же. Код кнопки "Заметка":
switch (item.getItemId()) {
case R.id.note:
Intent intent = new Intent(this, NoteActivity.class);
Intent position = getIntent();
int positionValue = position.getIntExtra("head", 0);
intent.putExtra("head", positionValue);
startActivity(intent);
break;
default:
break;
}
Код активности заметки:
public class NoteActivity extends UpActivity {
private EditText mEditText;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_note);
Intent intent = getIntent(); //получаем строку и формируем имя ресурса
String resName = "note" + intent.getIntExtra("head", 0) + ".txt";
mEditText = (EditText) findViewById(R.id.editText);
openFile(resName);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main_note, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_erase:
Toast.makeText(this, R.string.note_erase, Toast.LENGTH_LONG).show();
mEditText.setText("");
return true;
case R.id.action_save:
Toast.makeText(this, R.string.note_save, Toast.LENGTH_LONG).show();
Intent intent = getIntent(); //получаем строку и формируем имя ресурса
String resName = "note" + intent.getIntExtra("head", 0) + ".txt";
saveFile(resName);
return true;
default:
return true;
}
}
// Метод для открытия файла
private void openFile(String fileName) {
try {
InputStream inputStream = openFileInput(fileName);
if (inputStream != null) {
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(isr);
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
inputStream.close();
mEditText.setText(builder.toString());
}
} catch (Throwable t) {
Toast.makeText(getApplicationContext(),
"Exception: " + t.toString(), Toast.LENGTH_LONG).show();
}
}
// Метод для сохранения файла
private void saveFile(String fileName) {
try {
OutputStream outputStream = openFileOutput(fileName, 0);
OutputStreamWriter osw = new OutputStreamWriter(outputStream);
osw.write(mEditText.getText().toString());
osw.close();
} catch (Throwable t) {
Toast.makeText(getApplicationContext(),
"Exception: " + t.toString(), Toast.LENGTH_LONG).show();
}
}
}
У активности свое меню сохранить или стереть заметку (но даже при стирании файл не удаляется, а остается, просто он пустой)
Суть проблемы: так как при нажатии на кнопку "Заметка" самого файла заметки еще нет, выскакивает сообщение ошибки Имя пакета/files/note0.txt: open filed: ENOENT (no such file or directory)
Во второй раз ошибки уже нет
Подскажите, как решить проблему?
Предполагаю, что можно так:
1 вариант - создать пустые файлы txt (их не много) сразу до установки пакета (вопрос в том, куда их положить при создании приложения?)
2 вариант создавать файл не при открытии активности заметки, а при нажатии на кнопку (вопрос в том, как это сделать?)
Возможно, что-то другое
Помогите, пожалуйста...