Я разрабатываю приложение, в котором пользователь помещает некоторую числовую информацию в некоторые текстовые поля, приложение должно записывать информацию в текстовый файл для последующего использования, например, при следующем открытии приложения или нажатии кнопки обновления числа должны быть прочитаны из файла и загружены в те же текстовые поля, чтобы пользователь мог изменить их при необходимости. Хотя обе функции «писатель» и «загрузчик», похоже, работают, проблема в том, что каждый раз, когда вызывается «загрузчик», он загружает данные из какого-то ранее сохраненного файла, а не из файла, который создается прямо сейчас «писателем». ". Если пользователь хочет, чтобы новые сохраненные данные были загружены в текстовые поля, ему необходимо закрыть и снова открыть приложение. Чтобы лучше объяснить ситуацию, я поместил сценарий после кодов. Есть идеи, что не так и что можно сделать?
Вот код, который я использую для помещения информации в файл, и он отлично работает:
public void writer(View view){
try {
FileOutputStream fos = openFileOutput("myfilename", Context.MODE_WORLD_WRITEABLE | Context.MODE_WORLD_READABLE);
PrintStream prntst = new PrintStream(fos);
txtEditor=(EditText)findViewById(R.id.editText1);
prntst.println (txtEditor.getText().toString());
txtEditor=(EditText)findViewById(R.id.EditText02);
prntst.println (txtEditor.getText().toString());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
И вот код, который я использую для чтения информации из файла в некоторый ArrayList, затем этот ArrayList используется для заполнения текстовых полей, он также работает нормально (отлично означает без ошибок):
public void reader(View view){
try {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(openFileInput("myfilename")));
Scanner scanner = new Scanner(inputReader);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
bld.add(line);
}
inputReader.close();
scanner.close();
txtEditor=(EditText)findViewById(R.id.editText1);
txtEditor.setText(bld.get(0));
txtEditor=(EditText)findViewById(R.id.EditText02);
txtEditor.setText(bld.get(1));
} catch (IOException e) {
e.printStackTrace();
txtEditor=(EditText)findViewById(R.id.editText1);
bld.add((txtEditor.getText().toString()));
txtEditor=(EditText)findViewById(R.id.EditText02);
bld.add((txtEditor.getText().toString()));
}
}
Сценарий:
- Пользователь открывает приложение, есть некоторые значения по умолчанию в текстовых полях (два текстовых поля), пользователь меняет значения на 2 и 3 соответственно и касается кнопки сохранения.
- Пользователь снова меняет значения, но вместо нажатия кнопки сохранения он нажимает кнопку загрузки, теперь приложение должно загружать 2 и 3 в поля (которые сохраняются), но вместо этого загружает значения по умолчанию.
- Пользователь закрывает приложение и снова открывает их, на этот раз 2 и 3 отображаются по умолчанию в текстовых полях. Похоже, "загрузчик" СЕЙЧАС читает данные из ранее сохраненного файла.
- Пользователь меняет значения с «2 и 3» на «13 и 14» и нажимает кнопки сохранения и загрузки соответственно, но 2 и 3 загружаются в поля.
- Пользователь закрывает и снова открывает приложение, на этот раз отображаются 13 и 14.
PS. переменная bld является глобальной и определяется в MainActivity:
ArrayList<String> bld = new ArrayList<String>();
Спасибо,
Scenario:, чтобы текст отображался в виде упорядоченного списка. - person Torben Kohlmeier   schedule 04.06.2013